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);

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

这一章《C语言 - 文件I/O》你学到了什么?在下面做个笔记吧!做站不易,你的分享是对我们最大的支持,感谢!😊

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

相关推荐

Flutter核心技术与实战 -〔陈航 - 〕

DevOps实战笔记 -〔石雪峰 - 〕

软件设计之美 -〔郑晔 - 〕

Flink核心技术与实战 -〔张利兵 - 〕

为什么 malloc() 被认为是库调用而不是系统调用?

幂函数给出的答案与 C 中的 math.pow 函数不同

在 C 中使用数组而不是向量

判断由大括号组成的输入字符串是否格式正确

Gnuplot 和 C - 绘制不同的符号/ colored颜色

为什么启用优化时 GCC 11 编译器会产生奇怪的输出?

视频推荐

C语言 - 3. (必看)如何规划大学/研究生的学习 更多视频教程 »