当前位置: 首页 > article >正文

C 语言文件操作

在 C 语言中,文件操作是通过标准库中的文件输入输出函数来实现的。最常用的文件操作函数包括读取和写入文件的函数。常见的文件操作函数有:

1. 打开文件:fopen()

fopen() 函数用于打开一个文件,返回一个文件指针(FILE*),该指针可以用于后续的文件操作。

FILE *fopen(const char *filename, const char *mode);
  • filename:文件的路径或文件名。
  • mode:打开文件的模式,常见的模式包括:
    • "r":只读模式,文件必须存在。
    • "w":写入模式,文件不存在时会创建新文件,若文件存在,则清空文件。
    • "a":追加模式,数据会被写入到文件的末尾。
    • "rb", "wb":以二进制模式读取或写入文件。
    • "r+":读写模式,文件必须存在。
    • "w+":读写模式,文件不存在时创建文件,文件存在时清空文件。
    • "a+":追加读写模式。

2. 读取文件

2.1 fgetc()

fgetc() 函数从文件中读取下一个字符并返回,读取到文件末尾时返回 EOF

int fgetc(FILE *stream);
  • stream:文件指针。
  • 返回值:成功时返回读取的字符,失败时返回 EOF

示例:

#include <stdio.h>

int main() {
    FILE *file = fopen("example.txt", "r");
    if (file == NULL) {
        printf("Error opening file\n");
        return 1;
    }

    char c;
    while ((c = fgetc(file)) != EOF) {
        putchar(c);
    }

    fclose(file);
    return 0;
}
2.2 fgets()

fgets() 函数从文件中读取一行字符,直到遇到换行符 \n 或文件末尾 EOF,或者达到指定的字符数。

char *fgets(char *str, int num, FILE *stream);
  • str:存储读取结果的字符数组。
  • num:要读取的最大字符数(包括 \0 字符)。
  • stream:文件指针。

示例:

#include <stdio.h>

int main() {
    FILE *file = fopen("example.txt", "r");
    if (file == NULL) {
        printf("Error opening file\n");
        return 1;
    }

    char buffer[100];
    while (fgets(buffer, 100, file) != NULL) {
        printf("%s", buffer);
    }

    fclose(file);
    return 0;
}
2.3 fread()

fread() 函数从文件中读取指定大小的字节数据,通常用于读取二进制文件。

size_t fread(void *ptr, size_t size, size_t count, FILE *stream);
  • ptr:存储读取数据的内存位置。
  • size:每个数据项的大小(字节数)。
  • count:要读取的数据项数量。
  • stream:文件指针。

示例:

#include <stdio.h>

int main() {
    FILE *file = fopen("example.bin", "rb");
    if (file == NULL) {
        printf("Error opening file\n");
        return 1;
    }

    char buffer[128];
    size_t bytesRead = fread(buffer, sizeof(char), 128, file);
    printf("Read %zu bytes\n", bytesRead);

    fclose(file);
    return 0;
}

3. 写入文件

3.1 fputc()

fputc() 函数将一个字符写入到文件。

int fputc(int c, FILE *stream);
  • c:要写入的字符(以 int 类型传递)。
  • stream:文件指针。

示例:

#include <stdio.h>

int main() {
    FILE *file = fopen("example.txt", "w");
    if (file == NULL) {
        printf("Error opening file\n");
        return 1;
    }

    fputc('A', file);  // 写入字符 'A'

    fclose(file);
    return 0;
}
3.2 fputs()

fputs() 函数将字符串写入文件。

int fputs(const char *str, FILE *stream);
  • str:要写入的字符串。
  • stream:文件指针。

示例:

#include <stdio.h>

int main() {
    FILE *file = fopen("example.txt", "w");
    if (file == NULL) {
        printf("Error opening file\n");
        return 1;
    }

    fputs("Hello, world!\n", file);  // 写入字符串

    fclose(file);
    return 0;
}
3.3 fwrite()

fwrite() 函数将数据写入文件,通常用于写入二进制数据。

size_t fwrite(const void *ptr, size_t size, size_t count, FILE *stream);
  • ptr:指向要写入的数据的内存位置。
  • size:每个数据项的大小(字节数)。
  • count:要写入的数据项数量。
  • stream:文件指针。

示例:

#include <stdio.h>

int main() {
    FILE *file = fopen("example.bin", "wb");
    if (file == NULL) {
        printf("Error opening file\n");
        return 1;
    }

    char data[] = "This is some binary data";
    fwrite(data, sizeof(char), sizeof(data) - 1, file);

    fclose(file);
    return 0;
}

4. 关闭文件:fclose()

当文件操作完成后,需要关闭文件,这样可以确保所有的文件操作都已经完成,并且释放文件资源。

int fclose(FILE *stream);
  • stream:要关闭的文件指针。

示例:

#include <stdio.h>

int main() {
    FILE *file = fopen("example.txt", "r");
    if (file == NULL) {
        printf("Error opening file\n");
        return 1;
    }

    // 进行文件操作...

    fclose(file);  // 关闭文件
    return 0;
}

5. 错误处理

文件操作函数通常会返回一个值来指示是否成功。对于大多数函数,若操作失败,它们会返回以下值:

  • fgetc()fputc()fgets() 等函数在发生错误时返回 EOF
  • fread()fwrite() 返回实际读取或写入的字节数。

可以使用 ferror() 检查文件操作是否发生错误。

int ferror(FILE *stream);

如果发生错误,ferror() 会返回非零值。

总结

  • 读取文件fgetc(), fgets(), fread()
  • 写入文件fputc(), fputs(), fwrite()
  • 文件关闭fclose()
  • 错误处理:通过 ferror() 来检查文件操作中的错误。

这些文件操作函数为 C 语言程序提供了处理文本文件和二进制文件的基本能力,灵活使用可以有效处理不同类型的文件读取和写入需求。


http://www.kler.cn/a/559726.html

相关文章:

  • nim游戏及其进阶 [SDOI2011] 黑白棋 [SDOI2019] 移动金币
  • 使用docker开发镜像编译
  • 异常处理在 Promptic 中怎么实现?
  • Android 串口通信
  • 【前端进阶】01 重识HTML,掌握页面基本结构和加载过程
  • C语言多人聊天室 ---s(服务端)
  • 哈希表入门到精通:从原理到 Python 实现全解析
  • PcVue : 点亮马来西亚砂拉越偏远村庄
  • Windows 下 Visual Studio Code 常用快捷键指南
  • Docker部署中SQLite数据库同步问题解析
  • MacOS安装Emacs
  • Linux下基本指令(4)
  • 基于python+django的家教预约网站-家教信息管理系统源代码+运行步骤
  • C语言番外篇(3)------------>break、continue
  • Linux提权之metasploit 提权(五)
  • Seata1.5.2学习(二)——使用分布式事务锁@GlobalLock
  • Gin从入门到精通 (三)路由
  • [特殊字符] 蓝桥杯 Java B 组 之位运算(异或性质、二进制操作)
  • 在生产环境中部署和管理 PostgreSQL:实战经验与最佳实践
  • 如何在java中用httpclient实现rpc get请求