13 文件操作之 fgetc/fputc 与 fread/fwrite
在文件操作中,除了使用 fopen
和 fclose
进行文件的打开和关闭外,fgetc
、fputc
、fread
以及 fwrite
是非常重要的输入输出函数,它们允许我们以不同的方式读取和写入数据。接下来我们将深入探讨这些函数的用法,并通过案例澄清它们之间的区别和应用场景。
fgetc 和 fputc
fgetc
和 fputc
分别用于字符的读取和写入。这两个函数的使用场景通常是需要以字符为单位操作文本文件。
fgetc 函数
fgetc
函数从指定的文件流中读取下一个字符并返回。其函数原型如下:
1 | int fgetc(FILE *stream); |
stream
: 指向打开的文件的指针。
使用案例
以下是一个使用 fgetc
读取文本文件内容的简单示例:
1 |
|
在这个示例中,程序从 example.txt
文件中逐字符读取内容,并将其打印到控制台。fgetc
函数返回 EOF
(文件结束标志)时停止读取。
fputc 函数
fputc
函数向指定的文件流写入一个字符。其函数原型如下:
1 | int fputc(int char, FILE *stream); |
char
: 要写入的字符(以整型形式提供)。stream
: 指向打开的文件的指针。
使用案例
以下是一个使用 fputc
写入字符到文本文件的示例:
1 |
|
这个示例将在 output.txt
文件中逐字符写入字符串 "Hello, World!"
。
fread 和 fwrite
fread
和 fwrite
函数用于以块的形式读写数据,这在处理二进制文件或大型数据时尤为高效。
fread 函数
fread
函数从文件中读取多个对象。其函数原型如下:
1 | size_t fread(void *ptr, size_t size, size_t count, FILE *stream); |
ptr
: 指向存储读取数据的缓冲区的指针。size
: 每个对象的字节大小。count
: 要读取的对象数量。stream
: 指向打开的文件的指针。
使用案例
以下是一个使用 fread
读取二进制文件的示例:
1 |
|
在这个例子中,程序从 students.bin
文件中读取最多 10 个学生记录,并打印其 ID 和姓名。
fwrite 函数
fwrite
函数用于将多个对象写入文件。其函数原型如下:
1 | size_t fwrite(const void *ptr, size_t size, size_t count, FILE *stream); |
ptr
: 指向要写入的对象的指针。size
: 每个对象的字节大小。count
: 要写入的对象数量。stream
: 指向打开的文件的指针。
使用案例
以下是一个使用 fwrite
写入二进制文件的示例:
1 |
|
在这个示例中,程序将两个学生记录以二进制格式写入 students.bin
文件。
小结
通过 fgetc
和 fputc
我们可以方便地处理文本文件中的字符,而 fread
和 fwrite
则为我们提供了高效的二进制数据读写方式。选择合适的函数并理解其工作原理,能够帮助我们在不同的场景下更有效地进行文件操作。
在下一篇中,我们将讨论文件定位与缓冲,这将进一步让我们了解如何在文件中进行随意读取和写入。