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

【C语言】文件操作函数详解

LuckiBit

目录

  • C语言文件操作函数详解
    • 表格汇总
    • 1. `fopen`
    • 2. `fclose`
    • 3. `fread`
    • 4. `fwrite`
    • 5. `fseek`
    • 6. `ftell`
    • 7. `rewind`
    • 8. `fprintf`
    • 9. `fscanf`
    • 10. `feof`
    • 11. `ferror`
    • 12. `clearerr`
    • 13. 总结
    • 14. 附录:函数参考表
    • 15. 结束语
    • 相关文章:

C语言文件操作函数详解

C语言提供了一组标准库函数来处理文件操作,这些函数定义在 <stdio.h> 头文件中。文件操作包括文件的打开、读写、关闭以及文件属性的查询等。以下是常用文件操作函数的详细讲解,包括函数原型、参数说明、返回值说明、示例代码和表格汇总。

表格汇总

函数作用示例输出
fopen打开文件fopen("file.txt", "r")文件指针
fclose关闭文件fclose(file)返回 0EOF
fread从文件中读取数据fread(buffer, size, count, file)读取的数据
fwrite将数据写入文件fwrite(buffer, size, count, file)写入的数据
fseek设置文件位置指针fseek(file, offset, origin)返回 0EOF
ftell获取文件位置指针ftell(file)文件位置
rewind重置文件位置指针到文件开头rewind(file)无返回值
fprintf格式化输出到文件fprintf(file, "data: %d", value)格式化的字符串
fscanf从文件中格式化输入fscanf(file, "%d", &value)读取的值
feof检查文件是否到达文件末尾feof(file)返回非零值或 0
ferror检查文件操作是否发生错误ferror(file)错误代码
clearerr清除文件流的错误和EOF标志clearerr(file)无返回值

1. fopen

函数原型:

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

参数说明:

  • filename: 要打开的文件的路径。
  • mode: 文件打开模式,如 "r"(只读)、"w"(只写)、"a"(追加)等。

返回值说明:

  • 成功时,返回指向 FILE 类型的文件指针;失败时,返回 NULL

示例代码:

#include <stdio.h>int main() {FILE *file;file = fopen("example.txt", "w");if (file == NULL) {perror("无法打开文件");return 1;}fprintf(file, "Hello, World!\n");fclose(file);return 0;
}

表格说明:

函数作用示例输出
fopen打开文件fopen("example.txt", "w")文件指针或 NULL

2. fclose

函数原型:

int fclose(FILE *stream);

参数说明:

  • stream: 要关闭的文件指针。

返回值说明:

  • 成功时,返回 0;失败时,返回 EOF

示例代码:

#include <stdio.h>int main() {FILE *file;file = fopen("example.txt", "w");if (file == NULL) {perror("无法打开文件");return 1;}fprintf(file, "Hello, World!\n");if (fclose(file) != 0) {perror("无法关闭文件");return 1;}return 0;
}

表格说明:

函数作用示例输出
fclose关闭文件fclose(file)0EOF

3. fread

函数原型:

size_t fread(void *ptr, size_t size, size_t count, FILE *stream);

参数说明:

  • ptr: 指向存储读取数据的内存块的指针。
  • size: 每个元素的字节数。
  • count: 要读取的元素数量。
  • stream: 文件指针。

返回值说明:

  • 返回成功读取的元素数量。如果返回值小于 count,可能发生了文件结束或读取错误。

示例代码:

#include <stdio.h>int main() {FILE *file;char buffer[20];size_t bytesRead;file = fopen("example.txt", "r");if (file == NULL) {perror("无法打开文件");return 1;}bytesRead = fread(buffer, sizeof(char), sizeof(buffer) - 1, file);buffer[bytesRead] = '\0'; // 确保字符串结束符printf("读取数据: %s\n", buffer);fclose(file);return 0;
}

表格说明:

函数作用示例输出
fread从文件中读取数据fread(buffer, size, count, file)读取的数据

4. fwrite

函数原型:

size_t fwrite(const void *ptr, size_t size, size_t count, FILE *stream);

参数说明:

  • ptr: 指向要写入文件的内存块的指针。
  • size: 每个元素的字节数。
  • count: 要写入的元素数量。
  • stream: 文件指针。

返回值说明:

  • 返回成功写入的元素数量。如果返回值小于 count,可能发生了写入错误。

示例代码:

#include <stdio.h>int main() {FILE *file;const char *text = "Hello, File Writing!";file = fopen("example.txt", "w");if (file == NULL) {perror("无法打开文件");return 1;}if (fwrite(text, sizeof(char), strlen(text), file) < strlen(text)) {perror("写入文件失败");fclose(file);return 1;}fclose(file);return 0;
}

表格说明:

函数作用示例输出
fwrite将数据写入文件fwrite(buffer, size, count, file)写入的数据

5. fseek

函数原型:

int fseek(FILE *stream, long offset, int whence);

参数说明:

  • stream: 文件指针。
  • offset: 从 whence 指定的位置偏移的字节数。
  • whence: 指定偏移的起始位置,可以是 SEEK_SET(文件开头)、SEEK_CUR(当前位置)、SEEK_END(文件末尾)。

返回值说明:

  • 成功时返回 0;失败时返回 -1

示例代码:

#include <stdio.h>int main() {FILE *file;long position;file = fopen("example.txt", "r");if (file == NULL) {perror("无法打开文件");return 1;}fseek(file, 5, SEEK_SET);  // 从文件开头偏移5个字节position = ftell(file);    // 获取当前文件位置printf("文件位置: %ld\n", position); // 输出: 文件位置: 5fclose(file);return 0;
}

表格说明:

函数作用示例输出
fseek设置文件位置指针fseek(file, offset, whence)成功时 0-1

6. ftell

函数原型:

long ftell(FILE *stream);

参数说明:

  • stream: 文件指针,指向一个已打开的文件。

返回值说明:

  • 返回从文件开头到当前位置的字节数。成功时返回当前文件位置的偏移量,失败时返回 -1L

示例代码:

#include <stdio.h>int main() {FILE *file;long position;file = fopen("example.txt", "r");if (file == NULL) {perror("无法打开文件");return 1;}fseek(file, 10, SEEK_SET); // 从文件开头偏移10个字节position = ftell(file);    // 获取当前文件位置printf("文件当前位置: %ld\n", position); // 输出: 文件当前位置: 10fclose(file);return 0;
}

表格说明:

函数作用示例输出
ftell获取文件当前位置ftell(file)文件当前位置: 10

7. rewind

函数原型:

void rewind(FILE *stream);

参数说明:

  • stream: 文件指针,指向一个已打开的文件。

返回值说明:

  • 无返回值。此函数将文件位置指针重置到文件的开头。

示例代码:

#include <stdio.h>int main() {FILE *file;char buffer[50];file = fopen("example.txt", "r");if (file == NULL) {perror("无法打开文件");return 1;}fread(buffer, sizeof(char), sizeof(buffer) - 1, file); // 读取文件数据buffer[sizeof(buffer) - 1] = '\0'; // 确保字符串结束符rewind(file); // 重置文件指针到开头fread(buffer, sizeof(char), sizeof(buffer) - 1, file); // 重新读取文件数据buffer[sizeof(buffer) - 1] = '\0'; // 确保字符串结束符printf("重新读取的数据: %s\n", buffer); // 输出重新读取的数据fclose(file);return 0;
}

表格说明:

函数作用示例输出
rewind重置文件指针到文件开头rewind(file)无输出(重置指针)

8. fprintf

函数原型:

int fprintf(FILE *stream, const char *format, ...);

参数说明:

  • stream: 文件指针,指向一个已打开的文件。
  • format: 格式字符串,用于指定输出格式。
  • ...: 其他格式化数据,根据 format 中的占位符提供。

返回值说明:

  • 成功时,返回输出的字符总数;失败时返回 EOF

示例代码:

#include <stdio.h>int main() {FILE *file;int number = 42;file = fopen("example.txt", "w");if (file == NULL) {perror("无法打开文件");return 1;}if (fprintf(file, "The answer is %d\n", number) < 0) {perror("写入文件失败");fclose(file);return 1;}fclose(file);return 0;
}

表格说明:

函数作用示例输出
fprintf格式化输出到文件fprintf(file, "data: %d", value)格式化的字符串

9. fscanf

函数原型:

int fscanf(FILE *stream, const char *format, ...);

参数说明:

  • stream: 文件指针,指向一个已打开的文件。
  • format: 格式字符串,用于指定输入格式。
  • ...: 其他格式化输入,根据 format 中的占位符提供。

返回值说明:

  • 成功时,返回成功匹配和赋值的项目数;失败时返回 EOF

示例代码:

#include <stdio.h>int main() {FILE *file;int number;file = fopen("example.txt", "r");if (file == NULL) {perror("无法打开文件");return 1;}if (fscanf(file, "The answer is %d", &number) != 1) {perror("读取文件失败");fclose(file);return 1;}printf("读取的数字: %d\n", number);fclose(file);return 0;
}

表格说明:

函数作用示例输出
fscanf从文件中格式化输入fscanf(file, "%d", &value)读取的值

10. feof

函数原型:

int feof(FILE *stream);

参数说明:

  • stream: 文件指针,指向一个已打开的文件。

返回值说明:

  • 如果到达文件末尾,返回非零值;否则返回 0

示例代码:

#include <stdio.h>int main() {FILE *file;char buffer[20];file = fopen("example.txt", "r");if (file == NULL) {perror("无法打开文件");return 1;}while (fread(buffer, sizeof(char), sizeof(buffer) - 1, file) > 0) {buffer[sizeof(buffer) - 1] = '\0';printf("读取的数据: %s\n", buffer);}if (feof(file)) {printf("到达文件末尾\n");} else {printf("文件读取错误\n");}fclose(file);return 0;
}

表格说明:

函数作用示例输出
feof检查文件是否到达文件末尾feof(file)到达文件末尾

11. ferror

函数原型:

int ferror(FILE *stream);

参数说明:

  • stream: 文件指针,指向一个已打开的文件。

返回值说明:

  • 返回非零值表示发生了错误;返回 0 表示没有错误。

示例代码:

#include <stdio.h>int main() {FILE *file;char buffer[20];file = fopen("example.txt", "r");if (file == NULL) {perror("无法打开文件");return 1;}if (fread(buffer, sizeof(char), sizeof(buffer) - 1, file) < 0) {if (ferror(file)) {perror("读取文件错误");}fclose(file);return 1;}fclose(file);return 0;
}

表格说明:

函数作用示例输出
ferror检查文件操作是否发生错误ferror(file)错误代码

12. clearerr

函数原型:

void clearerr(FILE *stream);

参数说明:

  • stream: 文件指针,指向一个已打开的文件。

返回值说明:

  • 无返回值。此函数清除流的错误标志和EOF标志。

示例代码:

#include <stdio.h>int main() {FILE *file;char buffer[10];file = fopen("example.txt", "r");if (file == NULL) {perror("无法打开文件");return 1;}fread(buffer, sizeof(char), sizeof(buffer) - 1, file); // 模拟读取if (ferror(file)) {printf("读取文件时发生错误\n");clearerr(file); // 清除错误标志}// 继续操作文件fclose(file);return 0;
}

表格说明:

函数作用示例输出
clearerr清除文件流的错误和EOF标志clearerr(file)无输出(清除标志)

13. 总结

C语言的文件操作函数提供了一系列用于处理文件的工具,包括打开、关闭、读写、定位文件指针以及检查文件状态等。这些函数为程序员提供了灵活的文件管理能力,从简单的文件读写到复杂的文件处理任务,都可以通过这些标准库函数来实现。掌握这些函数的使用对于编写健壮且可靠的C程序至关重要。

14. 附录:函数参考表

函数作用示例返回值
fopen打开文件fopen("file.txt", "r")文件指针或 NULL
fclose关闭文件fclose(file)0EOF
fread从文件中读取数据fread(buffer, size, count, file)读取的数据
fwrite将数据写入文件fwrite(buffer, size, count, file)写入的数据
fseek设置文件位置指针fseek(file, offset, SEEK_SET)0EOF
ftell获取文件当前位置ftell(file)文件位置
rewind重置文件位置指针到文件开头rewind(file)无返回值
fprintf格式化输出到文件fprintf(file, "data: %d", value)格式化的字符串
fscanf从文件中格式化输入fscanf(file, "%d", &value)读取的值
feof检查文件是否到达文件末尾feof(file)非零值或 0
ferror检查文件操作是否发生错误ferror(file)错误代码
clearerr清除文件流的错误和EOF标志clearerr(file)无返回值

通过理解和运用这些文件操作函数,可以有效地进行文件读写操作,并处理各种文件相关的错误和状态检查。这对于实现文件管理功能以及确保程序的健壮性具有重要意义。

15. 结束语

  1. 本节内容已经全部介绍完毕,希望通过这篇文章,大家对C语言文件操作函数有了更深入的理解和认识。
  2. 感谢各位的阅读和支持,如果觉得这篇文章对你有帮助,请不要吝惜你的点赞和评论,这对我们非常重要。再次感谢大家的关注和支持!点我关注❤️

相关文章:

  • 指针的神秘探险:从入门到精通的奇幻之旅 !
http://www.lryc.cn/news/425460.html

相关文章:

  • Java 垃圾回收,看一遍就懂
  • 手把手教你CNVD漏洞挖掘 + 资产收集
  • 华为云低代码AstroZero技巧教学1:表格的超链接赋能
  • https握手过程详解
  • Lesson 63 Thank you, doctor
  • 使用python和matlab实现BP神经网络算法的分析比较
  • 智慧卫生间环境传感器有哪些?智慧卫生间的特点@卓振思众
  • 智能分班结果自动发布系统
  • vue 后台管理 指定项目别名
  • 【Python机器学习】FP-growth算法——构建FP树
  • JAVA itextpdf 段落自动分页指定固定行距打印
  • 基于SpringBoot+Vue的周边游平台个人管理模块的设计与实现
  • 开源数据库同步工具monstache
  • Ubuntu连接GitHub
  • 微信支付流程
  • LVS理论知识
  • uniapp接口请求this.$request
  • vulnhub靶机 W34KN3SS(渗透测试详解)
  • 2024年8月16日嵌入式学习
  • vue+ckEditor5 复制粘贴wold文字+图片并保存格式
  • redis列表若干记录
  • 固态硬盘用mbr还是GPT?固态硬盘分区类型用mbr还是GPT分析
  • http/sse/websocket 三大协议演化历史以及 sse协议下 node.js express 服务实现打字机案例 负载均衡下的广播实现机制
  • 智能时代新宠:2024年录音转文字软件
  • 【Python机器学习】树回归——使用Python的tkinter库创建GUI
  • 谷歌浏览器网页底图设置为全黑
  • Unity | AmplifyShaderEditor插件基础(第二集:模版说明)
  • 【Linux入门】Linux常见指令
  • startData
  • CV每日论文--2024.7.24