文件操作_C语言快速入门与计算机二级备考
文件的分类
二进制文件
- 所有的文件最终都是二进制的
- 二进制人类读写困难,而且不跨平台(因为在不同平台上int的大小不同,数据储存分大小端这些问题),但程序读写二进制文件比较快
- 为了克服二进制文件的不可移植性,可以不使用int而使用typedef有明确大小的类型(如
uint8_t之类);最好使用文本文件
文本文件
-
文本文件是可以以最简单方式读写的文件(而二进制文件需要用专门的程序来读写)
文本方便人类读写,并且能跨平台,但程序输入输出要经过格式化,开销大
文件输入输出
-
linux终端上特殊的方式:对于有scanf作输入,printf作输出的程序
我们可以用<指定程序的输入,>指定程序的输出,这样将输入输出都变为了文件
程序 < 输入文件程序 > 输出文件 -
<stdio.h>已经包含file这个类型的指针,用于文件操作
打开文件
打开文件函数
-
fopen("file","r")将程序中要读写的文件和磁盘上实际的数据文件联系
打开一个文件成功时,函数会返回一个FILE类型的指针,错误时则返回NULL
-
包含两个引号内的参数:
第一个参数
"file"表示文件的路径(需要确保路径存在)第二个参数
"r"表示该函数的模式
-
文件打开模式
-
r打开只读;
r+打开读写;
-
w打开只写,如果不存在则新建,存在则清空;
w+打开读写,如果不存在则新建,存在则清空;
-
a打开追加,如果不存在则新建,存在则从文件尾开始
a+打开可读并且可追加
-
x只新建,如果文件存在则不能打开,不会覆盖原有文件
可以与其他模式共同使用,比如wx
-
后缀b打开二进制文件,比如wb
文件的读写
读取文件函数
-
fscanffscanf(文件指针,“……”,&读取后要写入的变量)-
scanf的文件版本,只是在前面多一个指向文件的指针的参数 -
双引号中间是格式字符串,用于控制输入格式,如下:
fscanf(fp, "%s %s %s %d", str1, str2, str3, &year); -
返回值是成功读取的个数
-
-
freadfread(保存读取结果的空间的指针,读取的每个元素大小(字节为单位),读取元素数量, 文件指针);-
需要在参数表中写入读取数据项的大小,例如:
FILE *fp; char str[] = "test"; fp = fopen("file.txt", "w+"); fread(buffer, strlen(str)+1, 1, fp); //如此,fp所指文件被写入字符串str fclose(fp); -
适用于结构的读写,中间的两个参数分别用于表示结构的大小和表示要读取几个结构
-
返回值是成功读写的字节数,失败则返回EOF
-
-
fgetsfgets(保存读到字符的变量,需要读的字符数,文件指针)-
gets的文件版本 -
用于读取指定数量字符到字符串,当读到规定数量或换行符时停止,成功时将返回字符串
-
读取文件的实例:
#define N 100 char str[N+1]; while(fgets(str, N, fp) != NULL){ printf("%s", str); }//当100个元素内的字符不为空时,不断将fp所指文件中内容读到str中
-
-
fgetcfgetc(文件指针)-
读取一个字符,
getchar的文件版本 -
读取文件的实例:
char ch; while ((ch = fgetc(file)) != EOF) { printf("Character read: %c\n", ch); }
-
输出至文件
-
fprintfint fprintf(文件指针, “……”, ...);-
双引号之间写入格式字符串,后面为根据格式字符串所需的可变参数列表,类似于
printf的格式字符串 -
用于写入格式化文本,适用于需要格式化输出的场景
-
与
fscanf相对
-
-
fwritefwrite(指向要写入数据的指针, 每个元素的大小(字节为单位), 元素数量, 文件指针);- 用于写入二进制数据块,适用于结构体的写入以及大规模数据传输
- 与
fread相对
-
fputsfputs("要写入的字符串", 文件指针);- 与
fgets相对
- 与
-
fputcfputc(要写入的字符(类型为整数), 文件指针);- 用于写入单个字符,适用于逐字符处理
- 与
fgetc相对
在文件中定位
-
fseekfseek(指向文件的指针,第几个L,从哪一遍算起);-
有三个参数可决定寻找从哪一边开始:
SEEK_SET从头开始;SEEK_CUR从当前位置开始;SEEK_END从尾开始
-
-
ftellftell(指向文件的指针);- 用于返回当前文件所指的位置
-
rewindrewind(指向文件的指针);- 用于将文件指针重新定位到文件开头
-
feoffeof(指向文件的指针);- 判断文件是否结束
-
利用定位检测文件大小
fseek(fp,0L,SEEK_END);//从尾开始移动0个L -> 移到文件末尾 long size=ftell(fp);//size变量此时等于整个文件字节大小 int num=size/sizeof(struct A a);//num为整个文件中结构的数量
关闭文件
-
fclosefclose(指针)关闭文件函数参数为所要关闭的文件的指针
-
EOF
EOF是文本文件结束的标志,其值为-1在读取文件失败时,读取文件函数也会返回EOF
使用文件实例
-
打开文件的标准代码
FILE* fp=fopen("file","r");//创建一个指向文件的指针fp //"file"表示文件所在路径,"r"表示函数当前的模式 //倘若文件无法被正常打开,函数将会返回Null,因此需要判断文件能否打开 if (fp){ int num; fscanf(fp,"%d",&num);//读取文件内容,写入变量num printf("%d\n",num); fclose(fp);//关闭文件 }else{ printf("无法打开文件\n"); }
本文来自博客园,作者:无术师,转载请注明原文链接:https://www.cnblogs.com/artlessist/p/18547842
本文使用知识共享4.0协议许可 CC BY-NC-SA 4.0
特别说明版权归属的文章以及不归属于本人的转载内容(如引用的文章与图片)除外

浙公网安备 33010602011771号