C语言 - 文件I/O

C语言 - 文件I/O 首页 / C语言入门教程 / C语言 - 文件I/O

上一章介绍了用C编程语言处理的标准输入和输出设备,本章介绍C程序员如何创建,打开,关闭文本或二进制文件进行数据存储。

打开文件

您可以使用 fopen()函数来创建新文件或打开现有文件。该函数调用的原型如下-

FILE *fopen( const char * filename, const char * mode );

在这里, filename 是一个字符串文字,您将使用它来命名文件,访问 mode 可以具有以下值之一-

Sr.No.Mode & 描述
1

r

打开现有的文本文件以供阅读。

2

w

打开一个文本文件进行写入。如果不存在,则创建一个新文件。

3

a

打开一个文本文件以在追加模式下写入。如果不存在,则创建一个新文件。

4

r +

打开一个文本文件以供读取和写入。

5

w +

打开一个文本文件以供读取和写入。

6

a +

打开一个文本文件以供读取和写入。

如果您要处理二进制文件,则将使用以下访问模式而不是上述访问模式-

"rb", "wb", "ab", "rb+", "r+b", "wb+", "w+b", "ab+", "a+b"

关闭文件

要关闭文件,请使用fclose()函数。该函数的原型是-

int fclose( FILE *fp );

fclose()    -  函数成功返回零,如果关闭文件出错,则返回 EOF 。

C标准库提供了各种函数,可以逐字符或以固定长度的字符串形式读取和写入文件。

写入文件

以下是将单个字符写入文件的最简单函数-

int fputc( int c, FILE *fp );

函数 fputc()将参数c的字符值写入fp引用的输出流。如果出现错误,它将返回成功写入的书面字符,否则返回 EOF 。您可以使用以下函数将以null终止的字符串写入流-

int fputs( const char *s, FILE *fp );

您还可以使用 int fprintf(FILE * fp,const char * format,...)  函数将字符串写入文件,请尝试以下示例。

#include <stdio.h>

main() {
   FILE *fp;

   fp=fopen("/tmp/test.txt", "w+");
   fprintf(fp, "This is testing for fprintf...\n");
   fputs("This is learnfk.com for fputs...\n", fp);
   fclose(fp);
}

编译并执行上述代码后,它将在/tmp目录中创建一个新文件 test.txt ,并使用两个不同的函数编写两行。

读取文件

下面给出的是从文件读取单个字符的最简单函数-

int fgetc( FILE * fp );

fgetc()函数从fp引用的输入文件中读取字符,返回值是读取的字符,如果有错误,则返回 EOF ,以下函数允许从流中读取字符串-

char *fgets( char *buf, int n, FILE *fp );

函数 fgets()从fp引用的输入流中读取最多n-1个字符。它将读取的字符串复制到缓冲区 buf 中,并附加一个 null 字符以终止该字符串。

如果此函数在读取最大字符数之前遇到换行符'\n'或文件EOF的末尾,则它仅返回直到该点为止已读取的字符,包括换行符。您还可以使用 int fscanf(FILE * fp,const char * format,...)函数从文件中读取字符串,但是遇到第一个空格字符后它将停止读取。

#include <stdio.h>

main() {

   FILE *fp;
   char buff[255];

   fp=fopen("/tmp/test.txt", "r");
   fscanf(fp, "%s", buff);
   printf("1 : %s\n", buff );

   fgets(buff, 255, (FILE*)fp);
   printf("2: %s\n", buff );
   
   fgets(buff, 255, (FILE*)fp);
   printf("3: %s\n", buff );
   fclose(fp);

}

编译并执行上述代码后,它将读取上一部分中创建的文件,并产生以下输出-

无涯教程网

1 : This
2: is testing for fprintf...

3: This is testing for fputs...

二进制I/O函数

有两个函数,可用于二进制输入和输出-

size_t fread(void *ptr, size_t size_of_elements, size_t number_of_elements, FILE *a_file);
              
size_t fwrite(const void *ptr, size_t size_of_elements, size_t number_of_elements, FILE *a_file);

这两个函数都应用于读取或写入内存块-通常是数组或结构。

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

数据结构与算法之美 -〔王争〕

程序员的数学基础课 -〔黄申〕

Java并发编程实战 -〔王宝令〕

Kafka核心技术与实战 -〔胡夕〕

动态规划面试宝典 -〔卢誉声〕

说透区块链 -〔自游〕

零基础实战机器学习 -〔黄佳〕

徐昊 · TDD项目实战70讲 -〔徐昊〕

B端体验设计入门课 -〔林远宏(汤圆)〕

好记忆不如烂笔头。留下您的足迹吧 :)