文件操作
fopen
r 以只读方式打开文件, 该文件必须存在
r+ 以可读方式打开文件,该文件必须存在
rb+ 读写打开一个二进制文件,允许读写数据,文件必须存在
rw+ 读写打开一个文本文件,允许读和写
w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失,若文件不存在则建立该文件。
w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失,若文件不存在则建立该文件。
a 以追加的方式打开只写文件,若文件不存在,则会建立该文件,如果文件存在,写入的数据会被追加到文件末尾,即文件原先的内容不会被覆盖。(EOF符保留)
a+ 以追加的方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被追加到文件末尾,即文件原先的内容不会被覆盖。(原先的EOF符不保留)
EOF与feof 函数文件结尾
如果已经是文件尾, feof 函数返回true.
EOF 用于一个字符一个字符输出时,当获取到的字符是EOF(其中EOF真实为-1),则代表已经是文件尾。
fprintf, fscanf, fgets, fputs 函数
这些函数都是通过 FILE * 来对文件进行读写
stat 函数
1 |
|
stat.st_size; // 文件大小,单位:字节
函数的第一个参数代表文件名, 第二个参数是 struct stat 结构
得到的文件属性,包括文件建立时间,文件大小等信息。
fread 和 fwrite 函数
1 | size_t fread(void *buffer, size_t size, size_t count, FILE * stream); |
注意:这个函数以二进制形式对文件进行操作,不局限于文本文件
返回值:返回实际写入的数据块数目
fread 与 feof
注意一下两段代码的区别
1 | while(!feof(p)) |
1 | while(fread(&buf, 1, sizeof(buf), p)) |
通过 fwrite 将结构保存到二进制文件中
fseek 函数
1 | int fseek(FILE * _file, long _offset, int _orgin); |
函数设置文件指针 steam的位置。如果执行成功, stream将指向以fromwhere 为基准,偏移offset(指针偏移量) 个字节的位置, 函数返回 0. 如果执行失败则不改变 stream 指向的位置,函数返回一个非0值。
实验得出,超过文件末尾位置,还是返回0,往回偏移超过首位置,还是返回0,请小心使用。
1 | 第一个参数, stream为文件指针 |
ftell 函数
函数 ftell 用于得到文件位置指针当前位置相对于文件首的偏移字节数。在随机方式存取文件时,由于文件位置频繁的前后移动,程序不容易确定文件的当前位置。
1 | long len = ftell(fp); |
fflush 函数
fflush 函数可以将缓冲区中任何未写入的数据写入文件中。
成功返回 0, 失败返回 EOF.
1 | int fflush(FILE * _file); |
remove 函数
remove函数 删除指定文件
1 | int remove(const char * _fileName); |
参数filename为指定的要删除的文件名,如果是windows 下文件名与路径可以用反斜杠‘\’分隔,也可以用斜杠’/‘分隔。
rename 函数
rename 函数将指定文件改名
1 | int rename(const char * _oldFilename, const char * _newFilename); |
参数oldFilename为指定的要修改的文件名,newFilename 为修改后的文件名,如果是windows 下文件名与路径可以用反斜杠’\’分隔,也可以用斜杠’/‘分隔。
输出错误信息(排错):
1 | include <errno.h> |
1 |
|
1 |
|
1 |
|
1 |
|
1 |
|
1 |
|
1 |
|