C语言文件操作学习记录

  1. 文件打开 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。

 

  1. 文件关闭, fclose()

int fclose(FILE *fp);

关闭文件流,成功时返回0,否则返回EOF

  1. 文件读写 :
    1. fgetc() 从文件中读取一个字符

char ch=fgetc(fp);//从当前指针位置读取一个字符

ch=fgetc(fp); //fp所指文件的当前指针位置读取一个字符

while(ch!=EOF) //判断刚读取的字符是否是文件结束符

{

     putchar(ch); //若不是结束符,将它输出到屏幕上显示

    ch=fgetc(fp); //继续从fp所指文件中读取下一个字符

} //完成将fp所指文件的内容输出到屏幕上显示

fclose(fp); //关闭fp所指文件

  1. fputc() 写一个字符到文件中去

int fputc(int ch, FILE *fp) // 正常返回要写入的字符代码,否则返回EOF

  1. fgets() 从文件中读取一个字符串

char *fgets(char *str, int n, FILE *fp)

fp指向的文件中读取n-1个字符,并存放至str指出的字符数组中,最后加上结束符'\0'

str:接收字符串的内存地址,可以是数组名,也可以是指针

正常返回str的值即str地址),非正常返回NULL

  1. fputs() 写一个字符串到文件中去

int fputs(char *str, FILE *fp)

正常返回str的值即str地址),非正常返回NULL

  1. fprintf() 往文件中写格式化数据

int fprintf(FILE *fp, char *format, arg_list)

用法同 printf 多一个变量fp,写到文件中去,printf() 将数据写入屏幕文件stdout

  1. fscanf() 格式化读取文件中数据

int fscanf(FILE *fp, char *format, arg_list)

  1. fread() 以二进制形式读取文件中的数据

int fread( void *buffer,  size_t size, size_t num, FILE *fp);

buffer  fp中读取的数据到缓冲区的首地址

size 读取一个数据块的字节数

count 一次读取块的数量

正常返回数据块的个数即num, 异常返回0

  1. 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);

  1. getw()  以二进制形式读取一个整数

int getw(FILE *fp)

读取整数

正常返回读取的整数,异常返回EOF -1

  1. putw()  以二进制形式存储一个整数

int putw(int n, FILE *fp);

正常返回输出值,异常EOF -1

  1. 文件状态检查函数  
    1. feof  判断文件结束

int feof(FILE *fp)

        未结束返回0, 结束返回1

  1. ferror 文件读/写 出错

int ferror(FILE *fp)

无错误返回0 有错误 返回1

  1. clearerr 清除文件错误标志

void clearerr(FILE *fp)

  1. 文件定位函数  
    1. rewind 重置位置指针

void rewind(FILE *fp)

使fp指向的文件位置指针重新指向文件的开头位置

  1. fseek 移动文件的位置指针

int fseek(FILE *fp, long offset, int base)

使文件指针fp移到基于base的相对位置offset

offset 相对于base 的字节位移量,

  1. ftell 了解文件指针的当前位置

long ftell(FILE *fp)

取得由fp指定文件的当前读/写位置,该位置用相对于文件开头的位移量来表示

正常返回位移量,异常返回-1,表示出错

// 通过下列方式可以计算出文件大小

fseek(fp,0,SEEK_END); // 先使用SEEK_END将指针移动到文件最后

ftell(fp);//然后使用ftell获得最后的偏移字节数,也就是文件的大

 

  1. 二进制和文本模式区别
    1. 在windows系统中,文本模式下,文件以"\r\n"代表换行。若以文本模式打开文件,并用fputs等函数写入换行符"\n"时,函数会自动在"\n"前面加上"\r"。即实际写入文件的是"\r\n" 。
    2. 在类Unix/Linux系统中文本模式下,文件以"\n"代表换行。所以Linux系统中在文本模式和二进制模式下并无区别。
    3. 在windows下,读写文本文件的时候,是不写b的,但读写二进制文件的时候一定要写b,Linux,b是忽略的
  2. 参考
1.https://www.cnblogs.com/saolv/p/7793379.html

2.https://www.cnblogs.com/yongdaimi/p/6628806.html 

 

 

感觉学习时还是记录下,效果比较好,本篇文章主要是自己阅读这俩篇博客时的一些记录,抄袭为主,但是在自己整理时也可以感受到如此比光看不记录效果还是好不少,内容直接是复制我的OneNote笔记而来,格式有些错乱, 第一次写博客,排版不是那么美,也希望可以和爱学习的大家一起进步。

 

posted @ 2019-01-03 19:36  潇游兮  阅读(531)  评论(0)    收藏  举报