Чтение и запись файлов на языке C (1)

Предыдущие три части были представлены вам, и URL-адрес отправлен вам для ознакомления.Метод открытия
следующий:
Использование файла Значение Если указанный файл не существует
"r" (только для чтения) Ошибка при открытии существующего текстовый файл для входных данных
"w" (только для записи) для вывода данных открыть текстовый файл создать новый файл
"a" (добавить) добавить данные в конец текстового файла создать новый файл
"rb" (чтение- только) для входных данных, открыть двоичный файл ошибка
"wb" (только запись) для выходных данных, открыть двоичный файл создать новый файл
"ab" (добавить) добавить данные в конец двоичного файла создать новый файл
" r+" (чтение и запись) для чтения и записи, открыть текстовый файл error
"w+" (чтение и запись) для чтения и записи предложить новый файл для создания нового файла
"a+" (чтение и запись) открыть файл , чтение и запись в конец файла для создания нового файла
"rb+" (чтение-запись) Ошибка открытия двоичного файла для чтения и записи
"wb+" (чтение-запись) Создать новый двоичный файл для чтения и записи Создать новый файл
"ab+" (чтение-запись) Открытие двоичного файла, чтение и запись в конец файла для создания нового

кода экземпляра файла:

/* fopen fclose example */
#include <stdio.h>
int main ()
{
    
    
  FILE * pFile;
  //打开文件
  pFile = fopen ("myfile.txt","w");
  //文件操作
  if (pFile!=NULL)
 {
    
    
    fputs ("fopen example",pFile);
    //关闭文件
    fclose (pFile);
 }
  return 0;
}

4. Последовательное чтение и запись файлов

4.1 Введение в функции последовательного чтения и записи

Функция Имена функций применяются к
функции ввода символов fgetc все входные потоки
функция символьного вывода fputc все выходные
потоки функция ввода текстовой строки fgets все потоки ввода
функция вывода текстовой строки fputs все потоки вывода
функция форматированного ввода fscanf все потоки ввода
функция форматированного вывода fprintf весь поток вывода
двоичный входной файл fread
двоичный выходной файл fwrite

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//#include<stdlib.h>
#include<errno.h>
#include<string.h>
int main()
{
    
    
	FILE* pf = fopen("test.txt", "w");//定义一个变量pf,pf指向这个文件信息区,文件信息区和文件本身相关联,这时候我们就可以读或者写或者对文件做一些其他的事情等等
	if (pf == NULL)
	{
    
    
		printf("%s\n", strerror(errno));
		return 1;
	}
	//写文件
	//......
	//关闭文件
	fclose(pf);
	pf = NULL;//设置成空指针使其再也找不到这块空间
	return 0;
}

Некоторые студенты могут спросить, зачем закрывать файл, на который указывает pf?
Это потому, что файл также является ресурсом. Наконец, если вы закроете файл, вы освободите ресурс. Количество файлов, которые может открыть программа, ограничено. Это не значит, что его можно открывать бесконечно. много файлов, и если вы не закроете этот файл, это может привести к потере данных и т. д., поэтому обязательно закройте файл и установите для него значение NULL. Давайте посмотрим на код функции fputc
.
вставьте сюда описание изображения

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//#include<stdlib.h>
#include<errno.h>
#include<string.h>
int main()
{
    
    
	FILE* pf = fopen("test.txt", "w");
	if (pf == NULL)
	{
    
    
		printf("%s\n", strerror(errno));
		return 1;
	}
	char i = 0;
	for (i = 'a'; i <= 'z'; i++)
	{
    
    
		fputc(i, pf);
	}
	//写文件
	//......
	//关闭文件
	fclose(pf);
	pf = NULL;//设置成空指针使其再也找不到这块空间
	return 0;
}

Вы можете скопировать копию кода и протестировать его самостоятельно.В
это время мы откроем файл test.txt, чтобы посмотреть, все ли 26 букв, которые мы только что написали, были записаны в файл.Давайте посмотрим,
вставьте сюда описание изображения
результат принадлежит
реализации.Теперь мы хотим записать его в виде символов.Выньте все символы из моего файла,на этот раз нам нужно использовать функцию fgetcфункция fgetc

Короче
вставьте сюда описание изображения
вставьте сюда описание изображения
говоря,если будет прочитан неверный символ,то будет возвращен EOF
Теперь давайте посмотрим в коде

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//#include<stdlib.h>
#include<errno.h>
#include<string.h>
int main()
{
    
    
	FILE* pf = fopen("test.txt", "r");
	if (pf == NULL)
	{
    
    
		printf("%s\n", strerror(errno));
		return 1;
	}
	int ch = 0;
	while ((ch = fgetc(pf)) != EOF)
	{
    
    
		printf("%c ", ch);
	}
	//char i = 0;
	//for (i = 'a'; i <= 'z'; i++)
	//{
    
    
	//	fputc(i, pf);
	//}
	//写文件
	//......
	//关闭文件
	fclose(pf);
	pf = NULL;//设置成空指针使其再也找不到这块空间
	return 0;
}

вставьте сюда описание изображения
Вы можете видеть, что fgetc читает все символы в файле.Теперь
мы пишем строку данных.В это время нам нужно использовать функцию fputs.Функция fputs
const
вставьте сюда описание изображения
char *str,FILE*stream
Записать строку в поток здесь означает чтобы написать символы Запишите строку в поток (то есть в файл) на

вставьте сюда описание изображения
всеобщее обозрение.У вас могут возникнуть сомнения.Разве мы только что не написали 26 английских букв?Почему 26 букв здесь не хватает? Это потому, что когда вы снова записываете данные в файл, он автоматически очищает все, что вы написали в исходном файле, а затем перезаписываете его. Надеюсь, все понимают.

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//#include<stdlib.h>
#include<errno.h>
#include<string.h>
int main()
{
    
    
	FILE* pf = fopen("test.txt", "w");//"w"改成"a"的时候是追加的意思。我们来看下面的图片
	if (pf == NULL)
	{
    
    
		printf("%s\n", strerror(errno));
		return 1;
	}
	fputs("hello bit", pf);
	//int ch = 0;
	//while ((ch = fgetc(pf)) != EOF)
	//{
    
    
	//	printf("%c ", ch);
	//}
	//char i = 0;
	//for (i = 'a'; i <= 'z'; i++)
	//{
    
    
	//	fputc(i, pf);
	//}
	//写文件
	//......
	//关闭文件
	fclose(pf);
	pf = NULL;//设置成空指针使其再也找不到这块空间
	return 0;
}

ФАЙЛ pf = fopen("test.txt", "w");//Когда "w" меняется на "a", это означает добавление. Давайте посмотрим на картинку ниже *
вставьте сюда описание изображения
Теперь, что нам делать, если мы хотим случайным образом прочитать строку данных, поэтому мы вводим функцию fgets Строка, прочитанная
функцией fgets
вставьте сюда описание изображения
вставьте сюда описание изображения
, будет скопирована в пространство, на которое указывает str
Количество символов с наибольшим количеством символов будет Скопируйте его в str,

вставьте сюда описание изображения
вы можете попробовать разобраться сами

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//#include<stdlib.h>
#include<errno.h>
#include<string.h>
int main()
{
    
    
	FILE* pf = fopen("test.txt", "r");
	if (pf == NULL)
	{
    
    
		printf("%s\n", strerror(errno));
		return 1;
	}
	char arr[20];
	fgets(arr, 5, pf);
	printf("%s\n", arr);//放5的时候最多能够读到4个
	fclose(pf);
	pf = NULL;//设置成空指针使其再也找不到这块空间
	return 0;
}

вставьте сюда описание изображения
вставьте сюда описание изображения
Здесь я познакомлю вас с функцией perror, удобнее использовать некоторые
функции perror

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//#include<stdlib.h>
#include<errno.h>
#include<string.h>
int main()
{
    
    
	FILE* pf = fopen("test", "r");
	if (pf == NULL)
	{
    
    
		//printf("%s\n", strerror(errno));
		perror("fopen");
		return 1;
	}
	char arr[20];
	fgets(arr, 5, pf);
	printf("%s\n", arr);//放5的时候最多能够读到4个
	fclose(pf);
	pf = NULL;//设置成空指针使其再也找不到这块空间
	return 0;
}

/ Здесь я познакомлю вас с функцией fprintf
Функция fprintf
вставьте сюда описание изображения
вставьте сюда описание изображения
даст вам код

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//#include<stdlib.h>
#include<errno.h>
#include<string.h>
struct S
{
    
    
	char arr[20];
	int age;
	float score;
};
int main()
{
    
    
	struct S s = {
    
     "zhangsan",25,50.5f };
	FILE* pf = fopen("test.txt", "w");
	if (pf == NULL)
	{
    
    
		//printf("%s\n", strerror(errno));
		perror("fopen");
		return 1;
	}
	fprintf(pf, "%s %d %f", s.arr, s.age, s.score);//fprintf将数据写到文件里面去
	fclose(pf);
	pf = NULL;//设置成空指针使其再也找不到这块空间
	return 0;
}

Если вы хотите прочитать данные из файла, вы должны ввести функцию fscanf
fscanf function
вставьте сюда описание изображения
вставьте сюда описание изображения

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//#include<stdlib.h>
#include<errno.h>
#include<string.h>
struct S
{
    
    
	char arr[20];
	int age;
	float score;
};
int main()
{
    
    
	struct S s = {
    
     "zhangsan",25,50.5f };
	FILE* pf = fopen("test.txt", "w");
	if (pf == NULL)
	{
    
    
		//printf("%s\n", strerror(errno));
		perror("fopen");
		return 1;
	}
	fscanf(pf, "%s %d %f", s.arr, (&s.age), &(s.score));//fscanf从文件里面去读,将信息从pf指向的文件读出来放到s里面去,再将其打印出来
	printf("%s %d %f", s.arr, s.age, s.score);
	fclose(pf);
	pf = NULL;//设置成空指针使其再也找不到这块空间
	return 0;
}

Введение в функцию fwrite Функция
fread
вставьте сюда описание изображения
вставьте сюда описание изображения
На данный момент вы обнаружите, что у вас есть некоторые вещи, которые вы не можете понять. Это потому, что она написана в двоичной форме
. Время представить функцию fread Функция
fread
вставьте сюда описание изображения
Мы пишем ее в двоичной форме, мы может прочитать его в двоичной форме
вставьте сюда описание изображения

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//#include<stdlib.h>
#include<errno.h>
#include<string.h>
struct S
{
    
    
	char arr[20];
	int age;
	float score;
};
int main()
{
    
    
	struct S s = {
    
     "zhangsan",25,50.5f };
	FILE* pf = fopen("test.txt", "wb");
	if (pf == NULL)
	{
    
    
		perror("fopen");
		return 1;
	}
	//fwrite(&s, sizeof(struct S), 1, pf);
	fread(&s, sizeof(struct S), 1, pf);
	printf("%s %d %f\n", s.arr, s.age, s.score);
	fclose(pf);
	pf = NULL;//设置成空指针使其再也找不到这块空间
	return 0;
}

Конец этой главы!

Supongo que te gusta

Origin blog.csdn.net/fjj2397194209/article/details/131313358
Recomendado
Clasificación