打开文件

  1. 你可以使用fopen()函数创建一个新的文件或者打开一个已有的文件,这个调用会初始化类型FILE的一个对象,类型FILE包含了所有用来控制流的必要的信息。下面是这个函数调用的原型:
  1. FILE *fopen( const char * filename, const char * mode );

在这里,filename是字符串,用来命名文件,访问模式mode的值可以是下来值中的一个:
C 文件读写 - 图1

如果处理的是二进制文件,则需使用下面的访问模式来取代上面的访问模式:

  1. "rb", "wb", "ab", "rb+", "r+b", "wb+", "w+b", "ab+", "a+b"

关闭文件

  1. 为了关闭文件,请使用fclose()函数。函数的原型如下:
  1. int fclose( FILE *fp );

如果成功关闭文件,fclose( ) 函数返回零,如果关闭文件时发生错误,函数返回 EOF。这个函数实际上,会清空缓冲区中的数据,关闭文件,并释放用于该文件的所有内存。EOF 是一个定义在头文件 stdio.h 中的常量。

写入文件

  1. int fputc( int c, FILE *fp );

函数 fputc() 把参数 c 的字符值写入到 fp 所指向的输出流中。如果写入成功,它会返回写入的字符,如果发生错误,则会返回 EOF。您可以使用下面的函数来把一个以 null 结尾的字符串写入到流中:

  1. int fputs( const char *s, FILE *fp );

函数 fputs() 把字符串 s 写入到 fp 所指向的输出流中。如果写入成功,它会返回一个非负值,如果发生错误,则会返回 EOF。您也可以使用 int fprintf(FILE fp,const char format, …) 函数来写把一个字符串写入到文件中。

  1. #include <stdio.h>
  2. int main()
  3. {
  4. FILE *fp = NULL;
  5. fp = fopen("/tmp/test.txt", "w+");
  6. fprintf(fp, "This is testing for fprintf...\n");
  7. fputs("This is testing for fputs...\n", fp);
  8. fclose(fp);
  9. }

读取文件

  1. int fgetc( FILE * fp );

fgetc() 函数从 fp 所指向的输入文件中读取一个字符。返回值是读取的字符,如果发生错误则返回 EOF。下面的函数允许您从流中读取一个字符串:

  1. char *fgets( char *buf, int n, FILE *fp );

函数 fgets() 从 fp 所指向的输入流中读取 n - 1 个字符。它会把读取的字符串复制到缓冲区 buf,并在最后追加一个 null 字符来终止字符串。
如果这个函数在读取最后一个字符之前就遇到一个换行符 ‘\n’ 或文件的末尾 EOF,则只会返回读取到的字符,包括换行符。您也可以使用 int fscanf(FILE fp, const char format, …) 函数来从文件中读取字符串,但是在遇到第一个空格字符时,它会停止读取。

  1. #include <stdio.h>
  2. int main()
  3. {
  4. FILE *fp = NULL;
  5. char buff[255];
  6. fp = fopen("/tmp/test.txt", "r");
  7. fscanf(fp, "%s", buff);
  8. printf("1: %s\n", buff );
  9. fgets(buff, 255, (FILE*)fp);
  10. printf("2: %s\n", buff );
  11. fgets(buff, 255, (FILE*)fp);
  12. printf("3: %s\n", buff );
  13. fclose(fp);
  14. }

二进制I/O函数

  1. size_t fread(void *ptr, size_t size_of_elements,
  2. size_t number_of_elements, FILE *a_file);
  3. size_t fwrite(const void *ptr, size_t size_of_elements,
  4. size_t number_of_elements, FILE *a_file);

这两个函数都是用于存储块的读写 - 通常是数组或结构体。