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

【C++】文件操作

文件操作

  • 一、文本文件
    • (一)写文件
    • 读文件
  • 二、二进制文件
    • (一)写文件
    • (二)读文件

程序运行时产生的数据都属于临时数据,程序一旦运行结束都会被释放,通过文件可以将数据持久化,C++中对文件操作需要包含文件 <fstream>
操作文件三大类:
1、ofstream:写操作
2、ifstream:读操作
3、fstream:读写操作

一、文本文件

文件以文本的ASCII码形式存储在计算机中

(一)写文件

步骤:
1、包含头文件cpp#include <fstream>
2、创建流对象ofstream ofs;
3、打开文件ofs.open("文件路径",打开方式);
4、写数据ofs<<"写入的数据";
5、关闭文件ofs.close();

打开方式解释
ios::in为读文件而打开文件
ios::out为写文件而打开文件
ios::ate初始位置:文件尾
ios::app追加方式写文件
ios::trunc如果文件存在先删除,再创建
ios::binary二进制方式

文件打开方式可以配合使用,利用|操作符
例如用二进制写文件:ios::binary|ios::out

#include <iostream>
#include <string>
#include <fstream>
using namespace std;
void test() {ofstream ofs;ofs.open("test.txt", ios::out);ofs << "姓名:张三" << endl;ofs << "年龄:18" << endl;ofs << "性别:女" << endl;ofs.close();
}

在这里插入图片描述

读文件

步骤:
1、包含头文件cpp#include <fstream>
2、创建流对象ifstream ifs;
3、打开文件,判断是否打开成功ifs.open("文件路径",打开方式);
4、写数据:四种方式读取
5、关闭文件ifs.close();

void test1() {ifstream ifs;ifs.open("test.txt", ios::in);if (!ifs.is_open()) {cout << "文件打开失败" << endl;return;}//读数据1/*char buf[1024] = { 0 };while (ifs >> buf) {cout << buf << endl;}*///读数据2/*char buf[1024] = { 0 };while (ifs.getline(buf,sizeof(buf))) {cout << buf << endl;}*///读数据3/*string buf;while (getline(ifs, buf)) {cout << buf << endl;}*///读数据4,EOF表示文件尾,不推荐char c;while ((c = ifs.get()) != EOF) {cout << c;}ifs.close();
}

二、二进制文件

文件以文本的二进制形式存储在计算机中,用户一般不能直接读懂他们。
打开方式指定为ios::binary

(一)写文件

主要利用流对象调用成员函数write
函数原型:ostream& write(const char* buffer,int len);
参数解释:字符指针buffer指向内存中一段空间,len是读写的字节数。

#include <iostream>
#include <string>
//包含头文件
#include <fstream>
using namespace std;
class S {
public:char name[64];int age;
};
void test2() {//创建流对象ofstream ofs("s.txt", ios::out | ios::binary);//打开文件//ofs.open("s.txt", ios::out | ios::binary);//写数据S s1 = { "李四",20 };ofs.write((const char*)&s1, sizeof(S));//关闭ofs.close();
}

会有乱码,但不影响读数据就行
在这里插入图片描述

(二)读文件

二进制方式读文件主要利用流对象调用成员函数read
函数原型:istream& read(char *buffer,int len);
参数解释:字符指针buffer指向内存中一段存储空间,len是读写的字节数。

void test() {ifstream ifs;ifs.open("s.txt", ios::in | ios::binary);if (!ifs.is_open()) {cout << "读取失败" << endl;return;}S s1;ifs.read((char*)&s1, sizeof(S));cout << "姓名:" << s1.name <<"\t年龄:" << s1.age << endl;ifs.close();
}

读取没问题
在这里插入图片描述

http://www.lryc.cn/news/285096.html

相关文章:

  • 高效能方法 - 任务清单优先级
  • go 语言爬虫库goquery介绍
  • 解决 Navicat 在笔记本外接显示器分辨率自适应展示问题
  • 网络安全产品之认识入侵检测系统
  • 牛客周赛 Round 10 解题报告 | 珂学家 | 三分模板 + 计数DFS + 回文中心扩展
  • SpringBoot 更新业务场景下,如何区分null是清空属性值 还是null为vo属性默认值?
  • 【深度学习每日小知识】NLP 自然语言处理
  • 一文理解Python选择语句
  • MyBatis XML 映射文件中的 SQL 语句可以分为动态语句和静态语句
  • Flask用于生产环境
  • 程序员如何向上管理,升职加薪
  • Microsoft Word 删除空行
  • 基于一次应用卡死问题所做的前端性能评估与优化尝试
  • JVM(上)
  • 【js】js 异步机制详解 Generator / Async / Promise
  • 【动态规划】【数学】【C++算法】805 数组的均值分割
  • Django笔记(五):模型models
  • 一个golang小白使用vscode搭建Ununtu20.04下的go开发环境
  • 【复现】Hytec Inter HWL 2511 SS路由器RCE漏洞_25
  • Kafka系列(四)
  • 【Linux学习】进程信号
  • 机器学习没那么难,Azure AutoML帮你简单3步实现自动化模型训练
  • 数学建模实战Matlab绘图
  • TypeError the JSON object must be str, bytes or bytearray, not ‘list‘
  • 数字IC后端设计实现 | PR工具中到底应该如何控制density和congestion?(ICC2Innovus)
  • 产品经理与产品运营的区别和联系
  • CMU15-445-Spring-2023-分布式DBMS初探(lec21-24)
  • Arch linux 安装
  • 最新ChatGPT/GPT4科研应用与AI绘图及论文高效写作
  • 【leetcode】移除元素