C-文件-1

C语言可以编写各种后缀名的文件,尴尬,后缀名为mp3,xyz,都毫无压力,所有的文件类型都可以用来存储信息,主要看如何读取了。当然,这么高端的方法现阶段我还没有学到,现在只会读写数据。

C语言读写文件很简单,告诉程序文件的位置,打开它的方式,然后读写,然后关闭。主要是四个函数:fopen,fwrite,fread,fclose.

FILE* fp = fopen(文件路径指针,打开方法);返回值为文件指针,我使用的是fopen_s,安全性提高,返回值是一样的。例如下:

FILE* file;
errno_t fp;
fp = fopen_s(&file,”E:\\a.txt”,”r”);
if (fp != 0) {
printf_s(“文件打不开啊啊啊\n”);
return -1;
}

此处留疑问一个:fopen打开文件后,此时文件是在内存中吗?似乎不太可信,留疑。

Int n = fwrite(目标字符,写入字节大小(默认为1),写入次数(一般设置为sizeof(目标字符)),目标文件指针);返回值是写入的字节数,例如下:

for (int i = 0; i < 256;i++) {
char text[] = “helld,”;
n = fwrite(text, 3, strlen(text)/3,  file);
}

一般写入字节用1避免目标不能整除,多写了溢出字符,产生乱码。案例为错误示意。

Int m = fread(目标存储区域,读取字节大写,读取次数,目标文件指针);返回值是读取次数

char buf[128];
n = fread(buf, 12, 128, file);

Fclose(目标文件指针),关闭文件;无返回值

适合和fwrite一起使用的函数有sprintf(目标存储区域,输出格式(“%d”或者“%.2lf”),目标字符串):可以把数组格式化为有分隔符的字符串。返回值为格式化的字符大小,我使用的是sprintf_s,没区别,例如下

for (int i = 0; i < arr_len;i++) {
char text[128];
int s = sprintf_s(text,”%d,”,arr[i]);
n = fwrite(text, 1, strlen(text),  file);
}

读取未知大小文件,有函数feof(file)判断文件是否读取结束,返回值为布尔类型,为true时文件读取结束,下例以每次读4*1字节的方式循环读取文件数据,读完为止。

char buf[4];
int i = 1;
while (!feof(file))
{
int n = fread(buf, 1, 4, file);
if (n>0) {
printf_s(“read %d bytes,time %d,file is end:%d \n”, n,i, feof(file));
}
i++;
}