欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C语言文件操作总结

程序员文章站 2022-03-05 11:54:51
...

1 fopen文件操作方式

操作方式 含义 如果指定文件不存在
“r”只读 为了输入数据,打开一个已存在的文本文件 出错
“w”只写 为了输出数据,打开一个文本文件(清空) 建立新文件
“a”追加 向文本文件末尾添加数据 出错
“rb”只读 为了输入数据,打开一个已存在的二进制文件 出错
“wb”只读 为了输出数据,打开一个二进制文件(清空) 建立新文件
“ab”追加 向二进制文件末尾添加数据 出错
“r+”读写 为了读和写,打开一个文本文件 出错
“w+”读写 为了读和写,打开一个文本文件(清空) 建立新文件
“a+”读写 为了读和写,打开一个文本文件 出错
“rb+”读写 为了读和写,打开一个二进制文件 出错
“wb+”读写 为了读和写,打开一个二进制文件(清空) 建立新文件
“ab+”读写 为了读和写,打开一个二进制文件 出错
  • 用“r”方式打开文件只能用于向计算机输入而不能用作向该文件输出数据(即读数据到变量中),若文件不存在会出错
  • 用“w”方式打开文件只能用于向该文件写数据(即往文件里写数据),而不能用来向计算机输入,如果原文件不存在,则创建该文件,若该文件已存在,则打开文件前将其删除,再重新创建一个
  • 若要向文件末尾添加数据(不希望删除原有数据),则使用“a”方式,文件不存在会出错
  • 带“+”的方式,既可用来输入数据,也可用来输出数据
  • 若以任意方式打开文件失败,fopen函数会返回NULL
  • 在以文本文件(ASCII)读入字符时,遇到回车换行符(\r\n),系统把它转换为一个换行符(\n),在输出时把换行符(\n)转换为回车(\r)和换行(\n)两个字符
  • 在以二进制方式时,不进行上述转换,在内存中的数据形式与输出到外部文件中的数据形式完全一致,一一对应

1.1 打开文件fopen

FILE *fp = fopen("abc.txt", "r");

1.2 关闭文件fclose

fclose(fp); // 关闭成功返回0,否则返回EOF(-1)

2 向文件读写字符

2.1 读字符fgetc

函数原型int fgetc(FILE *stream)

  • 调用形式ch = fgetc(fp)
  • fp指向的文件读入一个字符,该函数以无符号char 强制转换为int的形式返回读取的字符,读成功,带回所读的字符,失败则返回文件结束标志EOF(-1)

2.2 写字符fputc

函数原型int fputc(int char, FILE *stream)

  • 调用形式fputc(ch,fp)
  • 把字符ch写到文件指针变量fp所指的文件中,输出成功返回值就是输出的字符,输出失败则返回EOF(-1)

3 向文件读写字符串

3.1 读字符串fgets

函数原型char *fgets(char *str, int n, FILE *stream)

  • 调用形式fgets(str, n, fp)
  • n为要求得到字符个数(但实际上只有n-1),从fp所指的文件读入一个长度为n-1的字符串,并在最后加一个\0
  • 然后把这n个字符存放在字符数组str中,若在读完n-1个字符之前遇到换行符(\n)或文件结束符EOF,读入结束
  • 若执行函数成功,则返回str数组首元素的地址,若一开始就遇到文件末尾或读数据出错,则返回NULL

3.2 写字符串fputs

函数原型int fputs(const char *str, FILE *stream)

  • 调用形式fputs(str, fp),把str所指向的字符串写到文件指针变量fp指向的文件中,字符串末尾的\0不输出
  • 输出成功返回0,失败返回EOF

4 格式化方式读写文件

fprintffscanf,在输入时要将文件的ASCII码转换为二进制形式在保存,再输出时又要将二进制形式转换为字符,要花费较多时间

4.1 格式化写fprintf

函数原型int fprintf(FILE *stream, const char *format, ...)

  • 如果成功,则返回写入的字符总数,否则返回一个负数

4.2 格式化读fscanf

函数原型int fscanf(FILE *stream, const char *format, ...)

  • 如果成功,返回成功匹配和赋值的个数。如果到达文件末尾或发生读错误,则返回EOF

5 二进制向文件读写一组数据

5.1 二进制读fread

函数原型size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream)

  • ptr为从文件读入的数据保存的地址
  • size为要读的字节数
  • nmemb为元素的个数,每个元素的大小为 size 字节
  • stream输出流的FILE指针
  • 返回成功读取的个数

5.2 二进制写fwrite

函数原型size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)

  • ptr为要向文件写入的数据首地址
  • size为要写的字节数
  • nmemb为元素的个数,每个元素的大小为 size 字节
  • stream输入流的FILE指针
  • 返回成功写入的个数

6 随机读写数据文件

6.1 指向文件开头rewind

函数原型void rewind(FILE *stream)

  • rewind的作用是使文件位置标记重新返回文件的开头
  • 此函数没有返回值
  • 调用形式rewind(fp);,将fp指向文件开头

6.2 改变位置fseek

函数原型int fseek(FILE *stream, long int offset, int whence)

  • stream为所操作的文件指针
  • offset这是相对 whence 的偏移量,以字节为单位,注意它是long int类型
  • whence这是表示开始添加偏移offset的位置。它一般指定为下列常量之一:
常量 描述 数字表示
SEEK_SET 文件的开头 0
SEEK_CUR 文件指针的当前位置 1
SEEK_END 文件的末尾 2
  • 向后移动,调用形式fseek(fp,100L,SEEK_SET);,表示从文件的开头,向后偏移到100个字节
  • 向前移动,调用形式fseek(fp,-200L,SEEK_END);,表示从文件的末尾,向前偏移到200个字节
  • 如果成功,则该函数返回零,否则返回非零值

6.3 测定当前位置ftell

函数原型long int ftell(FILE *stream)

  • stream文件指针
  • ftell函数的作用是得到流式文件中文件位置标记的当前位置
  • 该函数返回位置标识符的当前值。如果发生错误,则返回 -1L,全局变量errno被设置为一个正值

7 文件读写出错检测

7.1 函数ferror

  • 在调用一个输入输出函数后,可以使用ferror(fp)检测是否出现错误
  • 返回0代表未出错,返回非零表示出错
  • 对同一个文件每调用一次输入输出函数,都会产生新的值,应该在每次输入输出函数调用后,立即检测

7.2 函数clearerr

  • 若调用一个输入输出函数出错后,ferror为非零值
  • 调用clearerr(fp);可以将错误标记的值置位0,以便一下次检测
相关标签: C语言 c语言