乐闻世界logo
搜索文章和话题

C语言中文件操作的完整流程和错误处理机制是什么?

2月18日 17:15

C语言中文件操作的完整流程和错误处理机制是什么?

文件操作流程:

  1. 打开文件

    c
    FILE *fopen(const char *filename, const char *mode); // 模式选项 "r" // 只读 "w" // 只写(覆盖) "a" // 追加 "r+" // 读写 "w+" // 读写(覆盖) "a+" // 读写(追加) // 二进制模式 "rb", "wb", "ab", "rb+", "wb+", "ab+" FILE *fp = fopen("data.txt", "r"); if (fp == NULL) { perror("Failed to open file"); return 1; }
  2. 读取文件

    c
    // 字符读取 int fgetc(FILE *stream); char *fgets(char *str, int n, FILE *stream); // 格式化读取 int fscanf(FILE *stream, const char *format, ...); // 块读取 size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream); // 示例 char buffer[256]; while (fgets(buffer, sizeof(buffer), fp) != NULL) { printf("%s", buffer); }
  3. 写入文件

    c
    // 字符写入 int fputc(int c, FILE *stream); int fputs(const char *str, FILE *stream); // 格式化写入 int fprintf(FILE *stream, const char *format, ...); // 块写入 size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream); // 示例 fprintf(fp, "Name: %s, Age: %d\n", name, age);
  4. 文件定位

    c
    int fseek(FILE *stream, long offset, int origin); // origin: SEEK_SET, SEEK_CUR, SEEK_END long ftell(FILE *stream); void rewind(FILE *stream); // 示例 fseek(fp, 0, SEEK_END); // 移动到文件末尾 long size = ftell(fp); // 获取文件大小 rewind(fp); // 回到文件开头
  5. 关闭文件

    c
    int fclose(FILE *stream); fclose(fp);

错误处理机制:

  1. 检查返回值

    c
    if (ferror(fp)) { perror("Error reading file"); } if (feof(fp)) { printf("End of file reached\n"); }
  2. 错误码处理

    c
    errno = 0; FILE *fp = fopen("nonexistent.txt", "r"); if (fp == NULL) { if (errno == ENOENT) { printf("File does not exist\n"); } else { perror("Error opening file"); } }
  3. 清除错误状态

    c
    clearerr(fp); // 清除错误和EOF标志

最佳实践:

  1. 资源管理

    c
    FILE *fp = fopen("data.txt", "r"); if (!fp) { return -1; } // 使用 goto 进行错误处理 if (process_data(fp) != 0) { goto cleanup; } cleanup: if (fp) fclose(fp);
  2. 缓冲控制

    c
    setvbuf(fp, NULL, _IOFBF, 4096); // 全缓冲 setvbuf(fp, NULL, _IOLBF, 4096); // 行缓冲 setvbuf(fp, NULL, _IONBF, 0); // 无缓冲
  3. 临时文件

    c
    FILE *tmpfp = tmpfile(); if (tmpfp) { // 使用临时文件 fclose(tmpfp); // 自动删除 }
标签:C语言