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

【C语言】文件输入输出操作

打开文件

  • fopen(): 创建一个新文件/打开一个已有文件, 初始化类型FILE的一个对象, 包含所有用于控制流的必要信息
    • FILE *fopen(const char *filename, const char *mode);
    • 模式:
      • r: 打开一个已有文本文件, 允许读取
      • w: 打开一个文本文件, 允许写入; 若无文件则新建一个; 若有则重新写入
      • a: 打开一个文本文件, 追加模式写入; 若无文件则新建一个; 追加内容
      • r+: 打开一个文本文件, 允许读写
      • w+: 打开一个文本文件, 允许读写; 无文件则新建一个; 若有则重新写入
      • a+: 打开一个文本文件, 允许读写; 无文件则新建一个; 读取从头开始, 写入追加

关闭文件

  • fclose():
    • int fclose(FILE *fp);
    • 关闭成功返回0
    • 关闭失败返回EOF

写入文件

  • fputc(): 把参数c的字符值写入fp指向的输出流, 成功则返回写入字符, 失败则返回EOF
    • int fputc(int c, FILE *fp);
  • fputs(): 将字符串s写入fp指向的输出流, 成功则返回非负值, 失败则返回EOF
    • int fputs(const char *s, FILE *fp);
  • fprintf(): 一个字符串写入文件
    • int fprintf(FILE *fp, const char *format, ...)
#include <stdio.h>
int main()
{
    FILE *fp = NULL;
    fp = fopen("/tmp/test.txt", "w+");
    fputs("Shenzhen", fp);
    fprintf(fp, "Tianjin");
    fclose(fp);
}

读取文件

  • fgetc(): 从fp指向的输入文件读取一个字符, 返回读取的字符, 失败则返回EOF
    • int fget(FILE * fp);
  • fgets(): 从fp指向的输入流读取n-1个字符, 若途中遇到换行符/文件末尾EOF, 返回读取到的字符
    • char *fgets(char *buf, int n, FILE *fp);
  • fscanf(): 从文件读取字符串, 首个空格/换行符停止
    • int fscanf(FILE *fp, const char *format, ...)
#include <stdio.h>

#include <stdio.h>
 
int main()
{
   FILE *fp = NULL;
   char buff[255];
 
   fp = fopen("/tmp/test.txt", "r");
   fscanf(fp, "%s", buff);
   printf("1: %s\n", buff );
 
   fgets(buff, 255, (FILE*)fp);
   printf("2: %s\n", buff );
   
   fgets(buff, 255, (FILE*)fp);
   printf("3: %s\n", buff );
   fclose(fp);
}

首先,fscanf()方法只读取了This,因为它在后边遇到了一个空格.其次,调用fgets()读取剩余的部分,直到行尾.最后,调用fgets()完整地读取第二行.

相关文章:

  • 【教3妹学算法-每日一题】竞赛题:6171. 和相等的子数组
  • 遗传算法GA求解非连续函数问题
  • 【电商营销】为什么需要从获取客户转向留住客户
  • 实战讲解Redis基础数据类型List增删改查(带Java源码)
  • 分布式消息队列RocketMQ介绍
  • Django视图层模版层全面解析全网最细的教程
  • java Map集合基本概念
  • 类与对象以及原型机制
  • IMX6ULL学习笔记(6)——通过USB OTG烧录U-Boot(MfgTool工具)
  • 牛客 NC25005 [USACO 2008 Ope S]Clear And Present Danger
  • 洛谷 P2349:金字塔 ← 链式前向星 dfs
  • Flink—窗口、时间和水印
  • Cadence OrCAD Capture 查找功能详细介绍
  • 物联网病毒Mirai可靠性分析
  • c语言实现数据结构中的单向链表
  • Android 架构优化~MVP 架构改造
  • angular2 简述
  • axios 和 cookie 的那些事
  • ES6--对象的扩展
  • Git同步原始仓库到Fork仓库中
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • leetcode讲解--894. All Possible Full Binary Trees
  • React中的“虫洞”——Context
  • Ruby 2.x 源代码分析:扩展 概述
  • spring + angular 实现导出excel
  • vue学习系列(二)vue-cli
  • win10下安装mysql5.7
  • 从PHP迁移至Golang - 基础篇
  • 浮动相关
  • 高度不固定时垂直居中
  • 官方解决所有 npm 全局安装权限问题
  • 机器学习 vs. 深度学习
  • 解析 Webpack中import、require、按需加载的执行过程
  • 聚簇索引和非聚簇索引
  • 前端面试之CSS3新特性
  • 前端之React实战:创建跨平台的项目架构
  • 物联网链路协议
  • 云大使推广中的常见热门问题
  • ​flutter 代码混淆
  • ​什么是bug?bug的源头在哪里?
  • # 睡眠3秒_床上这样睡觉的人,睡眠质量多半不好
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • (4)STL算法之比较
  • (AngularJS)Angular 控制器之间通信初探
  • (Java)【深基9.例1】选举学生会
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (ZT)薛涌:谈贫说富
  • (八)Flask之app.route装饰器函数的参数
  • (二)springcloud实战之config配置中心
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • (学习日记)2024.04.10:UCOSIII第三十八节:事件实验
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • .【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)
  • .htaccess配置常用技巧