一、顺序读写文件
1. 使用 fprintf 和 fscanf 函数
- fprintf 函数:
- 格式: fprintf(FILE *stream, const char *format,...);
- 功能:将格式化的数据写入文件。例如:
FILE *fp;
int num = 10;
char str[] = "Hello";
fp = fopen("test.txt", "w");
fprintf(fp, "Number: %d, String: %s", num, str);
fclose(fp);
- 这里 fprintf 将整数 num 和字符串 str 按照指定格式写入 test.txt 文件。
- fscanf 函数:
- 格式: fscanf(FILE *stream, const char *format,...);
- 功能:从文件中读取格式化的数据。例如:
FILE *fp;
int num;
char str[20];
fp = fopen("test.txt", "r");
fscanf(fp, "Number: %d, String: %s", &num, str);
printf("Number: %d, String: %s\n", num, str);
fclose(fp);
- 此代码从 test.txt 文件中读取数据并按照格式解析。
2. 使用 fputs 和 fgets 函数
- fputs 函数:
- 格式: fputs(const char *s, FILE *stream);
- 功能:将字符串写入文件。例如:
FILE *fp;
char str[] = "This is a test";
fp = fopen("test.txt", "w");
fputs(str, fp);
fclose(fp);
- 这里 fputs 将字符串 str 写入 test.txt 文件。
- fgets 函数:
- 格式: fgets(char *s, int size, FILE *stream);
- 功能:从文件中读取一行字符串。例如:
FILE *fp;
char str[100];
fp = fopen("test.txt", "r");
fgets(str, 100, fp);
printf("%s", str);
fclose(fp);
- 此代码从 test.txt 文件中读取一行字符串并输出。
二、随机读写文件
1. 使用 fseek 、 ftell 和 rewind 函数实现文件指针定位
- fseek 函数:
- 格式: fseek(FILE *stream, long int offset, int whence);
- 功能:移动文件指针到指定位置。例如:
FILE *fp;
fp = fopen("test.txt", "r+");
fseek(fp, 5, SEEK_SET); // 从文件开头移动5个字节
fclose(fp);
- ftell 函数:
- 格式: ftell(FILE *stream);
- 功能:返回文件指针当前位置相对于文件开头的偏移量。例如:
FILE *fp;
long int pos;
fp = fopen("test.txt", "r");
fseek(fp, 0, SEEK_END);
pos = ftell(fp);
printf("File size: %ld bytes\n", pos);
fclose(fp);
- rewind 函数:
- 格式: rewind(FILE *stream);
- 功能:将文件指针重新定位到文件开头。例如:
FILE *fp;
char str[100];
fp = fopen("test.txt", "r");
fgets(str, 100, fp);
rewind(fp);
fgets(str, 100, fp); // 重新读取第一行
fclose(fp);
三、二进制文件读写
1. 使用 fwrite 和 fread 函数
- fwrite 函数:
- 格式: fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
- 功能:将数据以二进制形式写入文件。例如:
FILE *fp;
int arr[] = {1, 2, 3, 4, 5};
fp = fopen("test.bin", "wb");
fwrite(arr, sizeof(int), 5, fp);
fclose(fp);
- 这里 fwrite 将整数数组 arr 以二进制形式写入 test.bin 文件。
- fread 函数:
- 格式: fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
- 功能:从文件中读取二进制数据。例如:
FILE *fp;
int arr[5];
fp = fopen("test.bin", "rb");
fread(arr, sizeof(int), 5, fp);
for (int i = 0; i < 5; i++) {
printf("%d ", arr[i]);
}
fclose(fp);
- 此代码从 test.bin 文件中读取二进制数据并输出。