小熊奶糖(BearCandy)
小熊奶糖(BearCandy)
发布于 2025-12-06 / 0 阅读
0
0

c语言 文件

在C语言中,文件使用方式(文件打开模式)中的加号 + 表示 可读可写(读写模式)。

主要文件打开模式:

基本模式:

· "r" - 只读(文件必须存在)
· "w" - 只写(创建新文件,如果存在则清空)
· "a" - 追加(在文件末尾写入)

带 + 号的读写模式:

· "r+" - 读写(文件必须存在)
· "w+" - 读写(创建新文件,如果存在则清空)
· "a+" - 读写追加(可读,写操作在文件末尾)

  • 号的具体意义:
  1. 功能扩展
FILE *fp1 = fopen("file.txt", "r");  // 只能读
FILE *fp2 = fopen("file.txt", "r+"); // 既能读又能写
  1. 不同模式的特性:

"r+" 模式:

· 文件必须存在
· 可读取任意位置
· 可写入任意位置(会覆盖原有内容)
· 文件指针可通过 fseek() 移动

FILE *fp = fopen("test.txt", "r+");
if (fp) {
    fputs("Hello", fp);     // 写入(覆盖开头的内容)
    fseek(fp, 0, SEEK_SET); // 回到文件开头
    char buffer[100];
    fgets(buffer, 100, fp); // 读取刚才写入的内容
    fclose(fp);
}

"w+"" 模式:

· 如果文件存在,清空内容
· 如果文件不存在,创建新文件
· 可读可写

FILE *fp = fopen("test.txt", "w+"); // 清空文件内容
fputs("New content", fp);          // 写入
rewind(fp);                         // 回到开头
// 可以读取刚刚写入的内容

"a+" 模式:

· 写操作总是在文件末尾(追加)
· 读操作可以从任意位置
· 文件指针移动对读有效,但对写无效(写总是追加)

FILE *fp = fopen("test.txt", "a+");
fputs("Appended text", fp);  // 总是添加到文件末尾
fseek(fp, 0, SEEK_SET);      // 可以移动到开头读取
// 但再执行写操作时,又会自动跳到末尾

注意事项:

  1. 读写切换时需要定位:
FILE *fp = fopen("file.txt", "r+");
// 先写后读
fputs("Hello", fp);
fseek(fp, 0, SEEK_SET); // 必须重新定位!
char ch = fgetc(fp);    // 现在可以读取

// 先读后写
fgetc(fp);
fseek(fp, 0, SEEK_CUR); // 读写切换需要fseek
fputc('X', fp);
  1. 二进制文件的 + 模式:
"rb+"  // 二进制读写(文件必须存在)
"wb+"  // 二进制读写(创建/清空文件)
"ab+"  // 二进制追加读写

使用场景示例:

// 1. 修改文件中的部分内容
FILE *fp = fopen("data.dat", "r+b");
fseek(fp, 10, SEEK_SET);  // 跳到第10字节
fwrite(&new_data, sizeof(int), 1, fp);  // 修改该位置的数据

// 2. 读取并处理日志文件
FILE *log = fopen("app.log", "a+");
// 可以读取历史日志进行分析
// 同时可以追加新的日志记录

总结:+ 号让文件操作更加灵活,可以在同一个文件流上执行读写操作,特别适合需要修改文件内容或同时进行读写处理的场景。


评论