fgetc、fputc 一次读写一个字符

在C语言中,文件读写方式有很多种,比如一次读一个字符、一次读一行、一次读指定大小的内容等等方式,我们会依次介绍以上几种方式,本文开头,首先介绍一次读写一个字符的方法,其中需要使用到的函数为fgetc(读)、fputc(写)。期间的操作都需要文件句柄,我们也准备了一些文件做示例:

示例文件 File.txt:

Open file
Opens the file whose name is specified in the parameter filename and associates it with a stream that can be identified in future operations by the FILE pointer returned.

The operations that are allowed on the stream and how these are performed are defined by the mode parameter.

The returned stream is fully buffered by default if it is known to not refer to an interactive device (see setbuf).

The returned pointer can be disassociated from the file by calling fclose or freopen. All opened files are automatically closed on normal program termination.

The running environment supports at least FOPEN_MAX files open simultaneously.

对该文件的读写相关代码如下(只需将以上文字保存为File.txt存放到我们编写的程序当前目录即可正常读写),代码在VS下编译通过,注意第一行的

#define _CRT_SECURE_NO_WARNINGS

这段文本的意思是让VS可以使用非安全函数,因为VS认为fopen等函数是不安全的,推荐你使用fopen_s等安全函数,这完全根据个人需要,如果大家是在Windows下编程,还是建议大家都使用VS推荐的安全函数,这样可增加程序的健壮性。

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char* argv[])
{
	// 一次读写一个字符
	FILE* pFile = fopen("File.txt", "r");
	if (NULL == pFile) return -1;
	FILE* pWriteFile = fopen("WriteFile.txt", "w");
	if (NULL == pWriteFile)
	{
		fclose(pFile);
		return -1;
	}

	char ch;
	// EOF为文件的结束标志,如果fgetc返回的结果为EOF证明读到了文件末尾
	// 另外还有feof方式判断是否到文件末尾,但由于该函数缺陷过多,不推荐大家使用
	while ((ch = fgetc(pFile)) != EOF)
	{
		putchar(ch);
		// 将读取到的字符写入到新文件WriteFile.txt中
		fputc(ch, pWriteFile);
	}

	fclose(pFile);
	fclose(pWriteFile);

	system("pause");
	return 0;
}

注意上面代码中是如何判断文件结尾的,C语言提供了一个feof的函数,但由于该函数缺陷较多,容易出问题,所以不建议大家使用该函数来处理文件。所以并没有给出示例。

发表评论