C语言-文件读写(文件操作)

C 打开文件

打开文件函数

FILE *fopen( const char * filename, const char * mode );

mode 取值如下:

模式 描述
r 打开一个已有的文本文件,允许读取文件。
w 打开一个文本文件,允许写入文件。如果文件不存在,则会创建一个新文件。在这里,您的程序会从文件的开头写入内容。如果文件存在,则该会被截断为零长度,重新写入。
a 打开一个文本文件,以追加模式写入文件。如果文件不存在,则会创建一个新文件。在这里,您的程序会在已有的文件内容中追加内容。
r+ 打开一个文本文件,允许读写文件。
w+ 打开一个文本文件,允许读写文件。如果文件已存在,则文件会被截断为零长度,如果文件不存在,则会创建一个新文件。
a+ 打开一个文本文件,允许读写文件。如果文件不存在,则会创建一个新文件。读取会从文件的开头开始,写入则只能是追加模式。

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

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

C 关闭文件

关闭文件函数

 int fclose( FILE *fp );

C 写入文件

写入文件函数

// 方式1
int fputc( int c, FILE *fp );

// 方式2
int fprintf(FILE *fp,const char *format, ...);
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    FILE *file = NULL;

    file = fopen("C:/Users/Administrator/Desktop/c.txt", "w+");
    fprintf(file, "Hello pangugle!\n");
    fputs("Hello C, by fputs \n", file);
    fclose(file);

    return 0;
}

C 读取文件

读取文件函数

// 方式1
int fgetc( FILE * fp );

// 方式2 从 file 所指向的输入流中读取 n - 1 个字符。它会把读取的字符串复制到缓冲区 buf,
// 并在最后追加一个 null 字符来终止字符串。
//如果这个函数在读取最后一个字符之前就遇到一个换行符 '\n' 或文件的末尾 EOF,则只会返回读取到的字符,包括换行符
char *fgets( char *buf, int n, FILE *fp );

// 方式3 会文件中读取字符串,在遇到第一个空格和换行符时,它会停止读取
int fscanf(FILE *fp, const char *format, ...);

示例如下

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    FILE *file = NULL;
    // 只读
    file = fopen("C:/Users/Administrator/Desktop/c.txt", "r");

    char buff[255];

    fscanf(file, "%s", buff);
    printf("First: %s\n", buff );

    fgets(buff, 255, (FILE*)file);
    printf("Second: %s\n", buff );

    fgets(buff, 255, (FILE*)file);
    printf("Three: %s\n", buff );
    fclose(file);

    return 0;
}

运行结果为

First: Hello
Second:  pangugle!

Three: Hello C, by fputs
  • 首先,fscanf() 方法只读取了 Hello,因为它在后边遇到了一个空格。
  • 其次,调用 fgets() 读取剩余的部分,直到行尾, 也就是读取到了 pangugle!
  • 最后,调用 fgets() 完整地读取第二行。