C语言文件的随机读写是一项重要的编程技巧,可以帮助你在处理大型文件时准确地定位和读取其中特定的数据。下面,我将为您提供完整的攻略,涉及的内容包括:
- 打开文件并定义文件指针;
- 利用fread()函数进行随机读取文件;
- 利用fwrite()函数进行随机写入文件;
- 通过fclose()函数关闭文件。
打开文件并定义文件指针
在C语言中,打开文件需要使用fopen()函数,该函数的原型如下:
FILE *fopen(const char *filename, const char *mode);
其中,filename是文件名,mode是打开文件的模式,包括"r"(读取模式)、"w"(写入模式)和"a"(追加模式)。该函数的返回值是FILE类型的指针,需要用文件指针来操作文件。
例如,打开一个名为example.txt的文件,并用读取模式打开,可以使用如下代码:
FILE *fp;
fp = fopen("example.txt", "r");
利用fread()函数进行随机读取文件
在打开文件之后,我们需要用fread()函数进行随机读取文件,该函数的原型如下:
size_t fread(void *ptr, size_t size, size_t count, FILE *stream);
其中,ptr是指向空间的指针,size是每一个元素的字节数,count是要读取元素的个数,stream是文件指针。该函数的返回值是成功读取的元素个数,也就是count。
例如,我们可以读取example.txt文件中的前5个字节,代码如下:
char buffer[5];
fread(buffer, 1, 5, fp);
printf("%s", buffer);
利用fwrite()函数进行随机写入文件
与fread()类似,fwrite()函数可以用来进行随机写入文件操作,该函数的原型如下:
size_t fwrite(const void *ptr, size_t size, size_t count, FILE *stream);
其中,ptr是指向数据的指针,size是每一个元素的字节数,count是要写入元素的个数,stream是文件指针。该函数的返回值是成功写入的元素个数,也就是count。
例如,我们可以向example.txt文件中写入3个字节的数据,代码如下:
char buffer[3] = "abc";
fwrite(buffer, 1, 3, fp);
通过fclose()函数关闭文件
在所有的文件操作完成之后,需要通过fclose()函数关闭文件,该函数的原型如下:
int fclose(FILE *stream);
其中,stream是文件指针。该函数的返回值为0表示文件成功关闭,为EOF则表示关闭文件失败。
例如,我们可以通过如下代码来关闭example.txt文件:
fclose(fp);
下面是一个将example.txt文件中的内容全部读取出来,并重新写入一个新文件newfile.txt的示例代码:
#include <stdio.h>
int main()
{
FILE *fp;
FILE *fp_new;
char buffer[100];
// 打开example.txt文件,读取模式
fp = fopen("example.txt", "r");
if(fp == NULL) {
printf("Failed to open example.txt.\n");
return -1;
}
// 打开newfile.txt文件,写入模式
fp_new = fopen("newfile.txt", "w");
if(fp_new == NULL) {
printf("Failed to create newfile.txt.\n");
fclose(fp);
return -1;
}
// 读取example.txt文件中的数据,并写入newfile.txt文件
while(fread(buffer, sizeof(char), 100, fp) != 0) {
fwrite(buffer, sizeof(char), 100, fp_new);
}
// 关闭文件
fclose(fp);
fclose(fp_new);
return 0;
}
另一个示例代码:使用随机读取文件和写入文件的功能来实现从一个二进制文件中提取特定数据并写入新文件。
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *fp;
FILE *fp_new;
char buffer[100];
int index = 50;
// 打开binfile.bin文件,读取模式
fp = fopen("binfile.bin", "rb");
if(fp == NULL) {
printf("Failed to open binfile.bin.\n");
return -1;
}
// 打开newfile.bin文件,写入模式
fp_new = fopen("newfile.bin", "wb");
if(fp_new == NULL) {
printf("Failed to create newfile.bin.\n");
fclose(fp);
return -1;
}
// 定位到index处,并读取10个字节
fseek(fp, index, SEEK_SET);
fread(buffer, sizeof(char), 10, fp);
// 将读取的10个字节写入newfile.bin文件
fwrite(buffer, sizeof(char), 10, fp_new);
// 关闭文件
fclose(fp);
fclose(fp_new);
return 0;
}
希望以上的攻略和示例代码能够对您有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言 文件的随机读写详解及示例代码 - Python技术站