C语言中的文件操作总结

C语言中的文件操作主要包含文件的打开、读写操作以及文件的关闭。下面分别说明。

  • 文件的打开:fopen()

格式:FILE * fopen(const char * path, const char * mode);
参数:path——文件所在路径;mode——文件打开方式。

r 以只读方式打开文件,该文件必须存在。
r+ 以可读写方式打开文件,该文件必须存在。
rb+ 读写打开一个二进制文件,允许读数据。
rt+ 读写打开一个文本文件,允许读和写。
w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)
a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 (原来的EOF符不保留)
wb 只写打开或新建一个二进制文件;只允许写数据。
wb+ 读写打开或建立一个二进制文件,允许读和写。
wt+ 读写打开或着建立一个文本文件;允许读写。
at+ 读写打开一个文本文件,允许读或在文本末追加数据。
ab+ 读写打开一个二进制文件,允许读或在文件末追加数据。

返回值:如果文件打开成功,返回指向该文件的指针,否则返回空指针NULL,并把错误代码存在errno中。

  • 文件的读写

1.fread()和fwrite()函数(适合对数据块进行操作)
格式:size_t fread(void * buffer, size_t size, size_t count, FILE * stream);
           size_t fwrite(void * buffer, size_t size, size_t count, FILE * stream);
参数:buffer——用于接收或提供数据的地址(指针);
           size——单个元素大小,单位是字节;
           count——元素个数;
           stream——提供或接收数据的文件指针

2.fgetc()和fputc()(字符读写函数)
格式:int fgetc(FILE * stream);
           int fputc(int n, FILE * stream);
说明:fgetc()返回读取的一个字符(仅用其低8位),同时光标位置后移一个字节,如果读到末尾或出错返回EOF(-1);fputc()将字符量n输出到stream指向的文件中,返回值的情况与fgetc()相同。

3.fgets()和fputs()函数(字符串读写函数)
格式:char * fgets(char * str, int num, FILE * stream);
           int fputs(const char * str, FILE * stream);
参数:str——读入(要写入)的字符串存储的位置;
           num——读取的最大字符数目;
           stream——文件指针
fgets()调用成功返回str,否则返回空指针;fputs()调用成功返回非负值,否则返回EOF。

4.fprintf()和fscanf()函数(格式化读写)
格式:int fprintf(FILE * stream, const char * format, [argument]);
           int fscanf(FILE * stream, const char * format, [argument]);
返回值是成功读取(或写入)的参数的个数。
例子:fprintf(fp, “%s %s %d %f”, str1, str2, a,b);

5.ftell()函数
格式:long ftell(FILE *stream);
得到流式文件当前读写位置,其返回值是当前读写位置偏离文件头部的字节数。

6.fseek()函数
格式:int fseek(FILE *stream, long int offset, int origin);
参数:stream——文件指针;
           offset——从origin开始偏移的字节量;
           origin——偏移的起始位置,具体有如下3个值

Constant Reference position
SEEK_SET Beginning of file
SEEK_CUR Current position of the file pointer
SEEK_END End of file *

执行成功返回值0,否则返回非0值。

7.rewind()函数
格式:int rewind(FILE * stream);
功能:将文件内部的位置指针重新指向一个流的开头。

  • 文件的关闭

fclose()函数
格式:int fclose(FILE * stream);

  • 常用函数举例:获取文件大小
/**
  input: file name
  output: file length
*/
int getFileSize(char * strFileName){
    FILE * fp = fopen(strFileName, "r");
    fseek(fp, 0L, SEEK_END);
    int size = ftell(fp);

    rewind(fp);
    //read file operation below...

    fclose(fp);
    return size;
}

【参考】
C语言中文件操作函数详解
如何用C语言获取文件的大小

发表评论

电子邮件地址不会被公开。 必填项已用*标注