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

快速入门文件操作+5种例子演示

文件操作

    • 基本操作
      • 注意事项
      • 例子1:读取文件内容
      • 例子2:写入文件内容
      • 例子3:追加文件内容
      • 例子4:读取并写入文件内容(复制文件)
      • 例子5:使用二进制模式读写文件

基本操作

在C语言中,使用文件操作功能通常涉及以下步骤:

  1. 包含头文件
    首先,你需要包含 stdio.h 头文件,因为所有的标准I/O函数(包括文件操作函数)都定义在这个头文件中。

    #include <stdio.h>
    
  2. 打开文件
    使用 fopen 函数打开文件。你需要指定文件名和打开模式(如 “r” 用于读取,“w” 用于写入,“a” 用于追加等)。

    FILE *file = fopen("filename.txt", "r"); // 打开文件用于读取
    if (file == NULL) {perror("打开文件失败");return 1; // 返回非零值表示错误
    }
    

    如果文件不存在或无法打开,fopen 将返回 NULL,并可以通过 perror 函数打印出错误信息。
    打开模式
    不同的文件打开模式决定了文件如何被访问。常用的模式有:

    • "r":只读模式。
    • "w":写入模式(如果文件不存在则创建它,如果文件已存在则删除它的内容)。
    • "a":追加模式(如果文件不存在则创建它,如果文件已存在则追加到文件末尾)。
    • "r+":读写模式(从文件开头开始)。
    • "w+":读写模式(与 “w” 相同,但允许读取)。
    • "a+":读写模式(与 “a” 相同,但允许读取)。
    • "rb""wb""ab""r+b""w+b""a+b":二进制模式(与上面的文本模式相同,但用于二进制文件)。
  3. 读取或写入文件
    根据打开模式,你可以使用不同的函数来读取或写入文件。

    • 读取文本文件:fgets, fscanf
    • 写入文本文件:fputs, fprintf
    • 读取二进制文件:fread
    • 写入二进制文件:fwrite

    例如,读取文本文件:

    char buffer[1024];
    while (fgets(buffer, sizeof(buffer), file)) {printf("%s", buffer);
    }
    

    写入文本文件:

    fprintf(file, "这是写入文件的内容\n");
    
  4. 文件位置控制(可选):
    如果需要,可以使用 fseekftellrewind 等函数来控制文件位置。

    • fseek:用于设置文件位置指针。
    • ftell:返回当前文件位置指针的位置。
    • rewind:将文件位置指针重置到文件开头。

文件定位(如果需要):
如果你想在文件中移动位置(例如,从文件中间开始读取或写入),你可以使用 fseek 函数。

 fseek(file, 10, SEEK_SET); // 从文件开头向后移动10个字节

获取文件状态信息
使用 ftell 函数可以获取当前文件位置指示器的位置。

long position = ftell(file); // 获取当前位置
  1. 关闭文件
    使用 fclose 函数关闭文件。这是一个重要的步骤,因为它会确保所有的数据都被正确地写入磁盘,并释放与文件关联的所有资源。
 fclose(file); // 关闭文件
  1. 错误处理
    始终检查 fopen 的返回值,以确保文件已成功打开。如果 fopen 返回 NULL,则表示打开文件失败。

完整示例

#include <stdio.h>int main() {FILE *file;char buffer[1024];// 打开文件用于读取file = fopen("example.txt", "r");if (file == NULL) {perror("打开文件失败");return 1;}// 读取并打印文件内容while (fgets(buffer, sizeof(buffer), file)) {printf("%s", buffer);}// 关闭文件fclose(file);file = NULL;return 0;
}

注意事项

  • 确保你有足够的权限来读取或写入文件。
  • 读取文件时,要注意缓冲区的大小,以防止缓冲区溢出。
  • 写入文件时,要注意写入的数据类型和格式,以确保数据被正确地写入文件。
  • 在使用完文件后,始终使用fclose关闭文件,以释放资源并避免潜在的问题。
  • 如果文件操作可能失败(例如,文件不存在或磁盘空间不足),请确保你的代码能够妥善处理这些错误情况。

例子1:读取文件内容

#include <stdio.h>int main() {FILE *file;char line[1024];file = fopen("example.txt", "r"); // 以只读模式打开文件if (file == NULL) {perror("打开文件失败");return 1;}// 逐行读取文件并打印while (fgets(line, sizeof(line), file)) {printf("%s", line);}fclose(file); // 关闭文件file = NULL;return 0;
}

例子2:写入文件内容

#include <stdio.h>int main() {FILE *file;file = fopen("output.txt", "w"); // 以写入模式打开文件if (file == NULL) {perror("打开文件失败");return 1;}// 写入多行文本到文件fprintf(file, "这是第一行文本\n");fprintf(file, "这是第二行文本\n");fclose(file); // 关闭文件file = NULL;return 0;
}

例子3:追加文件内容

#include <stdio.h>int main() {FILE *file;file = fopen("example.txt", "a"); // 以追加模式打开文件if (file == NULL) {perror("打开文件失败");return 1;}// 追加文本到文件末尾fprintf(file, "这是追加到文件末尾的文本\n");fclose(file); // 关闭文件file = NULL;return 0;
}

例子4:读取并写入文件内容(复制文件)

#include <stdio.h>int main() {FILE *source, *dest;char ch;source = fopen("source.txt", "r"); // 打开源文件if (source == NULL) {perror("打开源文件失败");return 1;}dest = fopen("destination.txt", "w"); // 打开目标文件if (dest == NULL) {fclose(source); // 释放源文件句柄perror("打开目标文件失败");return 1;}// 从源文件读取内容并写入到目标文件while ((ch = fgetc(source)) != EOF) {fputc(ch, dest);}fclose(source); // 关闭源文件source = NULL;fclose(dest);   // 关闭目标文件dest = NULL;return 0;
}

例子5:使用二进制模式读写文件

#include <stdio.h>int main() {FILE *file;unsigned char buffer[1024];size_t n;// 以二进制写入模式打开文件file = fopen("binary_file.bin", "wb");if (file == NULL) {perror("打开文件失败");return 1;}// 写入一些二进制数据到文件unsigned int data = 0x12345678;fwrite(&data, sizeof(data), 1, file);fclose(file); // 关闭文件// 以二进制读取模式重新打开文件file = fopen("binary_file.bin", "rb");if (file == NULL) {perror("打开文件失败");return 1;}// 从文件中读取二进制数据n = fread(buffer, sizeof(unsigned char), sizeof(buffer), file);if (n > 0) {// 假设我们读取了整个unsigned int的数据if (n >= sizeof(unsigned int)) {unsigned int *read_data = (unsigned int*)buffer;printf("读取到的数据是: 0x%X\n", *read_data);}}fclose(file); // 关闭文件file = NULL;return 0;
}
http://www.lryc.cn/news/361461.html

相关文章:

  • 基于Vue3的Uniapp实训项目|一家鲜花店
  • Python3 字典
  • JPA详解
  • Linux线程:线程分离
  • chatgpt之api的调用问题
  • Java中lambda表达式是啥怎么使用
  • selenium中, quit 和close的区别
  • 管易云和金蝶云星空接口打通对接实战
  • DP-Kmaens密度峰值聚类算法
  • STM32-14-FSMC_LCD
  • linux nohup命令详解:持久运行命令,无视终端退出
  • PS系统教程09
  • 2024089期传足14场胜负前瞻
  • 备战十一届大唐杯国赛预选赛
  • 安装 Android Studio 2024.1.1.6(Koala SDK35)和过程问题解决
  • 美团一面:什么是CAS?有什么优缺点?我说你说的是AtomicInteger吗?
  • 【linux】(2)文件内容排序sort
  • css 图片上添加模糊背景的文字内容
  • Python3 函数参数
  • 精准检测,可燃气体报警系统的技术原理与特点
  • 6月2(信息差)
  • 先锋文汇发稿技巧方法
  • 无人机推流/RTMP视频推拉流EasyDSS无法卸载软件是什么原因?
  • QML信号连接到c++的槽函数(五)
  • [Windows] 植物大战僵尸杂交版
  • JVM之【GC-可达性分析算法】
  • 【机器学习】——驱动智能制造的青春力量,优化生产、预见故障、提升质量
  • Python实用代码片段分享(三)
  • 树形结构-CRUD接口
  • 【Qt知识】Qt窗口坐标系