飞道的博客

C语言文件相关操作

240人阅读  评论(0)

C语言文件IO相关操作


标准库IO接口

C语言stdio会默认打开三个输入输出流,分别是stdin、stdout、stderr,这三个流的类型都是FILE* ,fopen返回值类型,文件指针。C语言标准库里面封装了很多文件操作的接口,本篇博客主要浅谈一下五个最重要的接口:fopen、fwrite、fread、fseek、fclose。


提示:本篇内容主要在Linux环境下进行。

一、fopen

打开文件:FILE *fopen(const char *path, const char *mode);

参数解释:
path:要打开的文件路径名称(不带路径默认为当前目录);
mode:文件的打开方式;
①“r”:打开一个文件用于只读(从起始位置开始),不能写,如果文件不存在则报错;
②“r+”: 打开一个文件可读可写且读写位置都是从文件起始位置开始,如果文件不存在则报错;
③“w”:打开一个文件只写(从起始位置开始,如果文件存在则清空文件内容然后再写),不能读,且如果文件不存在则创建文件;
④“w+”:可读可写(从起始位置开始),如果文件存在则清空文件内容然后再写,且如果文件不存在则创建文件;
⑤“a”:追加只写(从文件末尾追加),文件不存在则创建;
⑥“a+”:读+追加写(从文件末尾追加、从文件起始位置读),文件不存在则创建;
⑦“b”:对文件数据进行二进制操作;“rb”、“wb”、“ab+”等等。
返回值:一个结构体指针FILE*——文件流指针(文件的操作句柄);打开失败返回NULL。

二、fwrite

文件写入:size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);

参数解释:
ptr:要写入文件的数据;
size:块大小;
nmemb:块个数;块大小*块个数=总体写入长度(比如要在文件中写入100个字节的数据,分两块,每块50个字节);
stream:fopen返回的操作句柄。

返回值:成功则返回实际写入文件的完整块个数(如果块大小为100但是只写入了99个字节,返回0.),失败返回0,(这里会产生歧义);如果把块大小设为1,那么返回值就是实际写入的字节长度。

三、fread

文件读取:size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);

参数解释:
ptr:一块内存空间首地址,用于存放读取到的数据;
size:块大小;
nmemb:块个数;
stream:fopen返回的操作句柄。

返回值:成功返回实际读取到的完整块个数;错误返回0(有歧义);读取到文件末尾返回0,强烈建议使用fread时的块大小设置为1。

辅助接口:
int feof(FILE *stream);判断是否读到文件末尾;
int ferror(FILE *stream);判断本次读取是否出错。

四、fseek


文件位置设置:int fseek(FILE *stream, long offset, int whence);

参数解释:
stream:fopen返回的文件操作句柄;
offset:偏移量(可正可负,正为往后,负为往前);
whence:相对偏移起始位置;
返回值:成功返回0,失败返回-1.

五、fclose


关闭文件,释放资源
int fclose(FILE *fp);


转载:https://blog.csdn.net/qq_43560037/article/details/115642098
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场