当我们开发应用程序时,经常需要与文件进行交互,读取或写入数据。C语言提供了一组标准库函数,使我们能够有效地进行文件操作。在本文中,我们将学习如何在C语言中使用文件和文件操作。

文件基础

在C语言中,文件是一个命名的存储区域,用于存储数据。文件可以是文本文件(包含可读的字符)或二进制文件(包含不可读的字节)。我们可以通过文件流(File Stream)来访问文件,文件流是一个指向文件的指针。

要在C语言中进行文件操作,我们需要包含 头文件,它包含了处理输入/输出的函数和宏定义。

文件指针和打开文件

在进行文件操作之前,我们需要声明一个文件指针变量。我们可以使用 FILE 数据类型来声明文件指针。

#include int main() { FILE *fp; // 其他代码... return 0; }

在打开文件之前,我们需要先将文件指针与特定的文件关联起来。我们可以使用 fopen 函数来打开一个文件,并将其与文件指针关联起来。

#include int main(){EILF*fp;fp = fopen("example.txt","r");return 0;}

fopen 函数接受两个参数:一个是文件名,另一个是打开模式。文件名是一个字符串,表示要打开的文件的名称和路径。打开模式是一个字符串,用于指定文件的操作方式,例如读取、写入等。

下面是一些常用的打开模式:

  • “r”:只读模式,打开文件用于读取。
  • “w”:写入模式,打开文件用于写入。如果文件存在,会截断文件为零长度;如果文件不存在,则创建新文件。
  • “a”:追加模式,打开文件用于写入,写入的内容追加到文件末尾。如果文件不存在,则创建新文件。
  • “rb”、”wb”、”ab”:二进制模式,与上述模式类似,但是用于二进制文件。
fp = fopen("example.txt", "r");if (fp == NULL) { printf("无法打开文件\n"); //或者perror(fopen);return 1; }

在打开文件时,我们应该检查文件指针是否为NULL,以确保文件成功打开。

文件读取

一旦文件成功打开,我们可以使用不同的函数来读取文件中的内容。

fgetc 函数

fgetc 函数用于从文件中逐个字符地读取数据。

int fgetc(FILE *stream);

fgetc 函数接受一个文件指针作为参数,并返回读取的字符。如果到达文件末尾或出现错误,它将返回特殊值 EOF.

int ch;while ((ch = fgetc(fp)) != EOF) {printf("%c", ch); }

上述代码将逐个字符地读取文件 fp 中的内容,并打印到标准输出。

fgets 函数

fgets 函数用于从文件中逐行读取数据。

char *fgets(char *str, int n, FILE *stream);

fgets 函数接受三个参数:一个字符指针(用于存储读取的字符串)、一个整数(表示最大读取的字符数)和一个文件指针。

char buffer[100];while (fgets(buffer, sizeof(buffer), fp) != NULL) { printf("%s", buffer); }

上述代码将逐行读取文件 fp 中的内容,并打印到标准输出。

文件写入

与文件读取类似,C语言提供了多种方式来向文件中写入数据。

fputc 函数

fputc 函数用于将一个字符写入文件。

int fputc(int ch, FILE *stream);

fputc 函数接受一个字符和一个文件指针作为参数,并返回写入的字符。如果写入失败,它将返回特殊值 EOF

int ch = 'A'; fputc(ch, fp);

上述代码将字符 'A' 写入文件 fp

fputs 函数

fputs 函数用于将一个字符串写入文件。

int fputs(const char *str, FILE *stream);

fputs 函数接受一个字符串和一个文件指针作为参数,并返回非负值表示成功,返回 EOF 表示失败。

const char *str = "Hello, World!"; fputs(str, fp);

上述代码将字符串 "Hello, World!" 写入文件 fp

fprintf 函数

fprintf 函数用于将格式化的数据写入文件。

int fprintf(FILE *stream, const char *format, ...);

fprintf 函数接受一个文件指针、一个格式化字符串和可变数量的参数,并将格式化的数据写入文件中。

int num = 42; fprintf(fp, "The answer is %d\n", num);

上述代码将格式化的字符串 "The answer is 42" 写入文件 fp

fscanf 函数

fscanf 函数用于从文件中读取格式化数据。与 scanf 函数类似,它可以读取不同类型的数据,如整数、浮点数和字符串等。

fscanf 函数接受一个文件指针、一个格式化字符串和可变数量的参数,并将从文件中读取的数据存储到这些参数中。

下面是一个例子,演示了如何使用 fscanf 函数从文件中读取整数和字符串:

#include  int main() { FILE *fp;int num;char str[100]; fp = fopen("data.txt", "r"); if (fp == NULL) { printf("无法打开文件\n"); return 1; } fscanf(fp, "%d %s", &num, str); printf("从文件中读取的数据为:%d, %s\n", num, str); fclose(fp); return 0; }

在上面的代码中,我们打开了名为 data.txt 的文件,并使用 fscanf 函数从文件中读取一个整数和一个字符串。我们使用 %d%s 标识符指定要读取的数据类型,并使用 & 运算符获取这些数据的地址。

在读取数据后,我们将其打印到标准输出中,并关闭了文件。

关闭文件

在完成对文件的读取或写入操作后,我们应该关闭文件以释放系统资源。我们可以使用 fclose 函数来关闭一个打开的文件。

int fclose(FILE *stream);

fclose 函数接受一个文件指针作为参数,并返回非零值表示成功,返回零值表示失败。

fclose(fp);

上述代码将关闭文件 fp

有帮助,帮忙点个赞