C语言文件操作学习记录
- 文件打开 fopen()
|
FILE *fopen(const char *pname, const char *mode) |
参数 1.pname 打开文件的路径,可绝对,可相对
2. mode 打开文件的方式
r 只读,文件必须存在
r+ 可读写,文件必须存在
rb+ 二进制文件 同 r+
w 只写 文件存在则删除其内容,不存在则创建文件
w+ 读写 文件存在则删除其内容,不存在则创建文件
a 追加仅可写 文件存在,在末尾附加内容,不存在则建立文件
a+ 追加读写 文件存在,在末尾附加内容,不存在则建立文件
返回值 打开成功返回FILE 的有效地址,失败返回NULL
|
FILE *fp; if((fp=fopen("test","r")) == NULL) { printf("The file can not be opened.\m"); exit(1); } |
注意:C语言将计算机的输入输出设备如键盘、屏幕均看成文件处理,ANSI C 标准中规定,执行程序时系统自动打开键盘、屏幕、错误三个文件,这三个文件指针由系统初始化,标准输入stdin,标准输出 stdout, 标准错误 stderr。
- 文件关闭, fclose()
|
int fclose(FILE *fp); |
关闭文件流,成功时返回0,否则返回EOF
- 文件读写 :
- fgetc() 从文件中读取一个字符
char ch=fgetc(fp);//从当前指针位置读取一个字符
|
ch=fgetc(fp); //从fp所指文件的当前指针位置读取一个字符 while(ch!=EOF) //判断刚读取的字符是否是文件结束符 { putchar(ch); //若不是结束符,将它输出到屏幕上显示 ch=fgetc(fp); //继续从fp所指文件中读取下一个字符 } //完成将fp所指文件的内容输出到屏幕上显示 fclose(fp); //关闭fp所指文件 |
- fputc() 写一个字符到文件中去
int fputc(int ch, FILE *fp) // 正常返回要写入的字符代码,否则返回EOF
- fgets() 从文件中读取一个字符串
char *fgets(char *str, int n, FILE *fp)
从fp指向的文件中读取n-1个字符,并存放至str指出的字符数组中,最后加上结束符'\0'
str:接收字符串的内存地址,可以是数组名,也可以是指针
正常返回str的值(即str地址),非正常返回NULL,
- fputs() 写一个字符串到文件中去
int fputs(char *str, FILE *fp)
正常返回str的值(即str地址),非正常返回NULL,
- fprintf() 往文件中写格式化数据
int fprintf(FILE *fp, char *format, arg_list)
用法同 printf, 多一个变量fp,写到文件中去,printf() 将数据写入屏幕文件stdout
- fscanf() 格式化读取文件中数据
int fscanf(FILE *fp, char *format, arg_list)
- fread() 以二进制形式读取文件中的数据
int fread( void *buffer, size_t size, size_t num, FILE *fp);
buffer 从fp中读取的数据到缓冲区的首地址
size 读取一个数据块的字节数
count 一次读取块的数量
正常返回数据块的个数即num, 异常返回0
- fwrite() 以二进制形式写数据到文件中去
|
struct Worker { int number; char name[20]; int age; }; struct Worker wk; FILE *in, *out; while(fread(&wk,sizeof(struct worker),1,in)==1) fwrite(&wk,sizeof(struct worker),1,out); |
- getw() 以二进制形式读取一个整数
int getw(FILE *fp)
读取整数
正常返回读取的整数,异常返回EOF -1
- putw() 以二进制形式存储一个整数
int putw(int n, FILE *fp);
正常返回输出值,异常EOF -1
- 文件状态检查函数
- feof 判断文件结束
int feof(FILE *fp)
未结束返回0, 结束返回1
- ferror 文件读/写 出错
int ferror(FILE *fp)
无错误返回0, 有错误 返回1
- clearerr 清除文件错误标志
void clearerr(FILE *fp)
- 文件定位函数
- rewind 重置位置指针
void rewind(FILE *fp)
使fp指向的文件位置指针重新指向文件的开头位置
- fseek 移动文件的位置指针
int fseek(FILE *fp, long offset, int base)
使文件指针fp移到基于base的相对位置offset处
offset 相对于base 的字节位移量,
- ftell 了解文件指针的当前位置
long ftell(FILE *fp)
取得由fp指定文件的当前读/写位置,该位置用相对于文件开头的位移量来表示
正常返回位移量,异常返回-1,表示出错
|
// 通过下列方式可以计算出文件大小 fseek(fp,0,SEEK_END); // 先使用SEEK_END将指针移动到文件最后 ftell(fp);//然后使用ftell获得最后的偏移字节数,也就是文件的大小 |
- 二进制和文本模式区别
- 在windows系统中,文本模式下,文件以"\r\n"代表换行。若以文本模式打开文件,并用fputs等函数写入换行符"\n"时,函数会自动在"\n"前面加上"\r"。即实际写入文件的是"\r\n" 。
- 在类Unix/Linux系统中文本模式下,文件以"\n"代表换行。所以Linux系统中在文本模式和二进制模式下并无区别。
- 在windows下,读写文本文件的时候,是不写b的,但读写二进制文件的时候一定要写b,Linux,b是忽略的
- 参考
2.https://www.cnblogs.com/yongdaimi/p/6628806.html
感觉学习时还是记录下,效果比较好,本篇文章主要是自己阅读这俩篇博客时的一些记录,抄袭为主,但是在自己整理时也可以感受到如此比光看不记录效果还是好不少,内容直接是复制我的OneNote笔记而来,格式有些错乱, 第一次写博客,排版不是那么美,也希望可以和爱学习的大家一起进步。

浙公网安备 33010602011771号