C语言 文件处理

文件操作

为什么使用文件

C语言 文件处理_第1张图片

什么是文件

在这里插入图片描述

程序文件

在这里插入图片描述

数据文件

在这里插入图片描述

文件名

C语言 文件处理_第2张图片

文件的打开和关闭

文件指针

C语言 文件处理_第3张图片

C语言 文件处理_第4张图片
只要没打开一个文件就会有一个文件信息区,只要一更改文件信息区也会跟着更改
C语言 文件处理_第5张图片

**FILE *fopen( const char filename, const char mode );
filename 文件名
*char mode 打开方式

w 以写的形式为打开,即使源文件有内容也会清空 文件打开失败返回空指针
C语言 文件处理_第6张图片
C语言 文件处理_第7张图片

int main()
{
	FILE* pf = fopen("test.dat", "w");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
		//写文件

	//关闭文件
	fclose(pf);
	pf = NULL;
	return 0;
}

文件的顺序读写

C语言 文件处理_第8张图片
C语言 文件处理_第9张图片

int main()
{
	FILE* pf = fopen("test.dat", "w");//
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	//写文件
	fputc('n', pf);//第一个是内容  第二个是指针

//关闭文件
	fclose(pf);
	pf = NULL;
	return 0;
}
int main()
{
	fputc('b', stdout);
	fputc('i', stdout);
	fputc('t', stdout);

	return 0;
}//在屏幕上打印bit没有在文件里

读取文件fgetc

如果读取正常返回字符ascii’值 如果失败返回eof

//EOF  他其实就是-1
//使用fgetc从文件流中读取数据
int main()
{
	FILE* pf = fopen("test.dat", "r");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	//读文件 读出当前文件夹内容
	int ret = fgetc(pf);
	printf("%c\n", ret);
    ret = fgetc(pf);
	printf("%c\n", ret);
	ret = fgetc(pf);
	printf("%c\n", ret);
	ret = fgetc(pf);
	printf("%c\n", ret);
	ret = fgetc(pf);
	printf("%c\n", ret);
	ret = fgetc(pf);
	printf("%c\n", ret);
	ret = fgetc(pf);
	printf("%c\n", ret);//读取结束或者错误的时候返回-1

	//关闭文件
	fclose(pf);
	pf = NULL;

	return 0;
}

fgetc从标准输入流读取
int main()
{
	int ret = fgetc(stdin);
	printf("%c\n", ret);
	ret = fgetc(stdin);
	printf("%c\n", ret);
	ret = fgetc(stdin);
	printf("%c\n", ret);

	return 0;
}

以行的形式

int main()
{
	FILE* pf = fopen("test.dat", "w");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	//写文件-按照行来写
	fputs("abcdef\n", pf);
	fputs("qwertyuiop\n", pf);


	//关闭文件
	fclose(pf);
	pf = NULL;
	return 0;
}

以读的形式
**char *fgets( char string, int n, FILE stream );
第一个读进来放入字符数组
n是读取的最大个数如果是100 实际是99

int main()
{
	char arr[10] ={0};
	FILE* pf = fopen("test.dat", "r");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}

	//读文件
	fgets(arr, 4, pf);//实际读了4个最后放了个\0
	printf("%s\n", arr);
	//下一次读取是从是从上一次未读取完的开始的
	fgets(arr, 4, pf);
	printf("%s\n", arr);

	//关闭文件
	fclose(pf);
	pf = NULL;
	return 0;
}

格式化输入函数

C语言 文件处理_第10张图片
写文件

int main()
{
	struct S s = { "abcdef", 10, 5.5f };
	//对格式化的数据进行写文件
	FILE*pf = fopen("test.dat", "w");
	if (NULL == pf)
	{
		perror("fopen");
		return 1;
	}
	//写文件
	fprintf(pf, "%s %d %f", s.arr, s.num, s.sc);

	//关闭文件
	fclose(pf);
	pf = NULL;
	return 0;
}

如何读出来并且还原结构体

struct S
{
	char arr[10];
	int num;
	float sc;
};


int main()
{
	struct S s = {0};
	//对格式化的数据进行写文件
	FILE* pf = fopen("test.dat", "r");
	if (NULL == pf)
	{
		perror("fopen");
		return 1;
	}
	//读文件
	fscanf(pf, "%s %d %f", s.arr, &(s.num), &(s.sc));//读的数据放在那里。   s. s.

	//打印
	fprintf(stdout, "%s %d %f\n", s.arr, s.num, s.sc);

	//关闭文件
	fclose(pf);
	pf = NULL;
	return 0;
}

二进制输入

size_t fwrite( const void *buffer, size_t size, size_t count, FILE *stream );

void *buffer, 指针你要写哪个数据把地址传过来
size_t size, 元素大小 字节
ize_t count,最多写多少个

//二进制的读写

struct S
{
	char arr[10];
	int num;
	float sc;
};

int main()
{
	struct S s = { "abcde", 10, 5.5f };
	//二进制的形式写
	FILE*pf = fopen("test.dat", "w");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	//写文件
	fwrite(&s, sizeof(struct S), 1, pf);

	//关闭文件
	fclose(pf);
	pf = NULL;

	return 0;
}
fread读取
struct S
{
	char arr[10];
	int num;
	float sc;
};

int main()
{
	struct S s = {0};
	//二进制的形式读
	FILE*pf = fopen("test.dat", "r");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	//读文件
	fread(&s, sizeof(struct S), 1, pf);

	printf("%s %d %f\n", s.arr, s.num, s.sc);

	//关闭文件
	fclose(pf);
	pf = NULL;

	return 0;
}

你可能感兴趣的:(c语言,linux,java)