一、引言
在C语言编程中,文件操作是一个重要的部分,它允许我们与计算机硬盘上的数据进行交互。文件按照数据的组织形式可以分为二进制文件和文本文件。二进制文件中的数据以二进制形式存储,而文本文件中的数据则是以人类可读的字符形式存储。本文将详细介绍C语言中这两种文件的操作方式,并辅以示例代码进行说明。
二、文本文件操作
打开文件
在C语言中,我们可以使用fopen函数来打开文件。对于文本文件,我们通常使用"r"(只读)、"w"(写入,如果文件已存在则覆盖原有内容)、"a"(追加写入,如果文件已存在则在文件末尾添加内容)等模式。
示例代码:
#include <stdio.h> int main() { FILE *fp; fp = fopen("test.txt", "w"); // 打开文件,如果不存在则创建 if (fp == NULL) { printf("Failed to open file\n"); return 1; } // ... 文件操作代码 ... fclose(fp); // 关闭文件 return 0; }
写入文件
使用fprintf函数可以向文本文件中写入数据。该函数与printf函数类似,但多了一个文件指针参数。
示例代码:
#include <stdio.h> int main() { FILE *fp; fp = fopen("test.txt", "w"); if (fp == NULL) { printf("Failed to open file\n"); return 1; } fprintf(fp, "Hello, World!\n"); // 写入字符串到文件 fclose(fp); return 0; }
读取文件
使用fscanf函数可以从文本文件中读取数据。该函数与scanf函数类似,但多了一个文件指针参数。
示例代码:
#include <stdio.h> int main() { FILE *fp; char buffer[100]; fp = fopen("test.txt", "r"); if (fp == NULL) { printf("Failed to open file\n"); return 1; } fscanf(fp, "%s", buffer); // 读取字符串到buffer中 printf("Read from file: %s\n", buffer); fclose(fp); return 0; }
注意:上述读取示例仅读取了一个单词,因为%s格式说明符在遇到空白字符(如空格、制表符或换行符)时会停止读取。如果要读取整行文本,可以使用fgets函数。
三、二进制文件操作
打开文件
与文本文件类似,使用fopen函数打开二进制文件时,需要使用"rb"(只读)、"wb"(写入,覆盖原有内容)、"ab"(追加写入)等模式。
写入文件
使用fwrite函数可以向二进制文件中写入数据。该函数需要指定要写入的数据块、数据块的大小、数据块的数量以及文件指针。
示例代码:
#include <stdio.h> int main() { FILE *fp; int data[] = {1, 2, 3, 4, 5}; int n = sizeof(data) / sizeof(data[0]); fp = fopen("data.bin", "wb"); if (fp == NULL) { printf("Failed to open file\n"); return 1; } fwrite(data, sizeof(int), n, fp); // 写入整型数组到文件 fclose(fp); return 0; }
读取文件
使用fread函数可以从二进制文件中读取数据。该函数需要指定读取数据的目标位置、数据块的大小、要读取的数据块数量以及文件指针。
示例代码:
#include <stdio.h> int main() { FILE *fp; int data[5]; fp = fopen("data.bin", "rb"); if (fp == NULL) { printf("Failed to open file\n"); return 1; } fread(data, sizeof(int), 5, fp); // 从文件读取整型数组到data中 for (int i = 0; i < 5; i++) { printf("%d ", data[i]); } printf("\n"); fclose(fp); return 0; }
四、总结
本文详细介绍了C语言中二进制文件和文本文件的操作方式,包括打开文件、写入文件和读取文件等基本操作,并辅以示例代码进行说明。通过对比可以发现,二进制文件和文本文件在数据组织方式、存储效率以及读取写入方式等方面存在差异。在实际编程中,应根据具体需求选择合适的文件类型进行操作。