当前位置: 首页 > 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;
}

相关文章:

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

文件操作 基本操作注意事项例子1&#xff1a;读取文件内容例子2&#xff1a;写入文件内容例子3&#xff1a;追加文件内容例子4&#xff1a;读取并写入文件内容&#xff08;复制文件&#xff09;例子5&#xff1a;使用二进制模式读写文件 基本操作 在C语言中&#xff0c;使用文…...

基于Vue3的Uniapp实训项目|一家鲜花店

基于Vue的Uniapp实训指导项目 项目预览&#xff1a; 在这里插入图片描述 pages.json {"pages": [ //pages数组中第一项表示应用启动页&#xff0c;参考&#xff1a;https://uniapp.dcloud.io/collocation/pages{"path": "pages/index/index",&…...

Python3 字典

前言 本文主要介绍Python中的字典&#xff08;dict&#xff09;,主要内容包括&#xff1a;字典简介、字典特性、字典的基本操作。 文章目录 前言一、字典简介二、字典特性1、键值对2、无序性?3、可变性4、键的唯一性5、值的类型不限 三、字典的基本操作1、创建2、访问3、增加…...

JPA详解

文章目录 JPA概述JPA的优势JPA注解 JPA概述 Java Persistence API&#xff08;JPA&#xff09;是 Java EE 平台的一部分&#xff0c;它为开发者提供了一种用于对象关系映射&#xff08;ORM&#xff09;的标准化方法。JPA 提供了一组 API 和规范&#xff0c;用于在 Java 应用程…...

Linux线程:线程分离

目录 一、什么是线程分离 1.1pthread_detach 1.2pthread线程库存在的意义 1.3__thread线程的局部存储 1.4系统调用clone 一、什么是线程分离 1.1pthread_detach 默认情况下&#xff0c;新创建的线程是joinable的&#xff0c;线程退出后&#xff0c;需要对其进行pthread_joi…...

chatgpt之api的调用问题

1.调用api过程中&#xff0c;出现如下报错内容 先写一个测试样例 import openaiopenai.api_key "OPEN_AI_KEY" openai.api_base"OPEN_AI_BASE_URL" # 是否需要base根据自己所在地区和key情况进行completion openai.ChatCompletion.create(model"g…...

Java中lambda表达式是啥怎么使用

在Java中&#xff0c;Lambda表达式&#xff08;也称为闭包&#xff09;是一种简洁地表示匿名函数&#xff08;即没有名称的函数&#xff09;的方式。它们允许你将函数作为参数传递或赋值给变量&#xff0c;从而简化代码。Lambda表达式在Java 8及更高版本中引入。 Lambda表达式…...

selenium中, quit 和close的区别

close时 """ close和quit的区别 close关闭当前页 (只是关闭了当前) quit离开整个浏览器 &#xff08;走远了&#xff09; """ from selenium import webdriver import time# 创建浏览器驱动对象 from selenium.webdriver.co…...

管易云和金蝶云星空接口打通对接实战

管易云和金蝶云星空接口打通对接实战 源系统:管易云 金蝶管易云是金蝶集团旗下以电商和新零售为核心业务的子公司&#xff0c;公司于2008年成立&#xff0c;拥有从事电商及新零售业务相关专业知识工作者超过1000人。为伊利、网易有道、东阿阿胶、金龙鱼、海康、科大讯飞等超过1…...

DP-Kmaens密度峰值聚类算法

我有个问题 关于 [密度值>密度阈值] 的判定这里&#xff0c;新进来的新数据怎么确定他的密度值&#xff1f;密度阈值又是怎样确定的呢&#xff1f;...

STM32-14-FSMC_LCD

STM32-01-认识单片机 STM32-02-基础知识 STM32-03-HAL库 STM32-04-时钟树 STM32-05-SYSTEM文件夹 STM32-06-GPIO STM32-07-外部中断 STM32-08-串口 STM32-09-IWDG和WWDG STM32-10-定时器 STM32-11-电容触摸按键 STM32-12-OLED模块 STM32-13-MPU 文章目录 1. 显示器分类2. LCD简…...

linux nohup命令详解:持久运行命令,无视终端退出

nohup &#xff08;全称为 “no hang up”&#xff09;&#xff0c;用于运行一个命令&#xff0c;使其在你退出 shell 或终端会话后继续运行。 基本语法 nohup command [arg1 ...] [&> output_file] &command 是你想要运行的命令。[arg1 ...] 是该命令的参数。&am…...

PS系统教程09

修复照片 修饰工具 污点修复画笔工具&#xff08;J&#xff09; 主要作用&#xff1a;去除一些污点或者不需要的 【&#xff1a;缩小】&#xff1a;放大 目标&#xff1a;去掉这两个点 修复画笔工具 也就是说我们要有取样点 选择修复画笔工具按住Alt键吸取周边相近颜色松开单机…...

2024089期传足14场胜负前瞻

2024089期售止时间为6月3日&#xff08;周一&#xff09;22点00分&#xff0c;敬请留意&#xff1a; 本期1.5以下赔率5场&#xff0c;1.5-2.0赔率5场&#xff0c;其他场次是平半盘、平盘。本期14场难度偏低。以下为基础盘前瞻&#xff0c;大家可根据自身判断&#xff0c;复选增…...

备战十一届大唐杯国赛预选赛

这次省赛带了太多个省一了&#xff0c;具体可看下面的图片&#xff0c;只放了一部分。目前根据可靠消息&#xff0c;应该还有个预选赛和去年一样&#xff0c;就是还会考一次仿真。如果说通过了就是国二起步然后去北方工业争夺国一国二&#xff0c;没过的话就是国三。 每…...

安装 Android Studio 2024.1.1.6(Koala SDK35)和过程问题解决

记录更新Android Studio版本及适配Android V应用配置的一些过程问题。 安装包&#xff1a;android-studio-2024.1.1.6-windows.exe原版本&#xff1a;Android Studio23.2.1.23 Koala 安装过程 Uninstall old version 不会删除原本配置&#xff08;左下角提示&#xff09; Un…...

美团一面:什么是CAS?有什么优缺点?我说你说的是AtomicInteger吗?

引言 传统的并发控制手段&#xff0c;如使用synchronized关键字或者ReentrantLock等互斥锁机制&#xff0c;虽然能够有效防止资源的竞争冲突&#xff0c;但也可能带来额外的性能开销&#xff0c;如上下文切换、锁竞争导致的线程阻塞等。而此时就出现了一种乐观锁的策略&#x…...

【linux】(2)文件内容排序sort

sort 是一个用于排序文件内容的命令行工具&#xff0c;在 Linux 和 Unix 系统中非常常用。 基本用法 sort [OPTION]... [FILE]...常用选项 按数值排序 -n sort -n filename例子&#xff1a;对包含数值的文件进行排序。 按字典顺序排序 -d sort -d filename例子&#xff1…...

css 图片上添加模糊背景的文字内容

html部分 <div class"onlogo"> <img src"../assets/img/banner.png" /><div class"imgText"><div class"title">一体化电子印章应用服务</div><div class"content">为企业提供安全可靠…...

Python3 函数参数

前言 本文主要介绍python中的函数参数&#xff0c;主要内容包括形式参数与实际参数的概念、位置参数、关键字参数、默认参数、可变参数。 文章目录 前言一、形式参数与实际参数的概念二、位置参数&#xff08;也叫必需参数&#xff09;三、关键字参数四、默认参数五、可变参数…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误&#xff0c;它们的含义、原因和解决方法都有显著区别。以下是详细对比&#xff1a; 1. HTTP 406 (Not Acceptable) 含义&#xff1a; 客户端请求的内容类型与服务器支持的内容类型不匹…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上&#xff0c;开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识&#xff0c;在 vs 2017 平台上&#xff0c;进行 ASP.NET 应用程序和简易网站的开发&#xff1b;初步熟悉开发一…...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性&#xff1a;电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中&#xff0c;电力载波技术&#xff08;PLC&#xff09;凭借其独特的优势&#xff0c;正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据&#xff0c;无需额外布…...

C++ 基础特性深度解析

目录 引言 一、命名空间&#xff08;namespace&#xff09; C 中的命名空间​ 与 C 语言的对比​ 二、缺省参数​ C 中的缺省参数​ 与 C 语言的对比​ 三、引用&#xff08;reference&#xff09;​ C 中的引用​ 与 C 语言的对比​ 四、inline&#xff08;内联函数…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成

厌倦手动写WordPress文章&#xff1f;AI自动生成&#xff0c;效率提升10倍&#xff01; 支持多语言、自动配图、定时发布&#xff0c;让内容创作更轻松&#xff01; AI内容生成 → 不想每天写文章&#xff1f;AI一键生成高质量内容&#xff01;多语言支持 → 跨境电商必备&am…...

OPENCV形态学基础之二腐蚀

一.腐蚀的原理 (图1) 数学表达式&#xff1a;dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一&#xff0c;腐蚀跟膨胀属于反向操作&#xff0c;膨胀是把图像图像变大&#xff0c;而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈

在日常iOS开发过程中&#xff0c;性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期&#xff0c;开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发&#xff0c;但背后往往隐藏着系统资源调度不当…...

CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝

目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为&#xff1a;一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...

Ubuntu Cursor升级成v1.0

0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开&#xff0c;快捷键也不好用&#xff0c;当看到 Cursor 升级后&#xff0c;还是蛮高兴的 1. 下载 Cursor 下载地址&#xff1a;https://www.cursor.com/cn/downloads 点击下载 Linux (x64) &#xff0c;…...