【C++】文件操作

目录

文件类型:

操作文件的三大类:

[一、文本文件 -- 写文件](#一、文本文件 -- 写文件)

[二、文本文件 -- 读文件](#二、文本文件 -- 读文件)

[三、二进制文件 -- 写文件](#三、二进制文件 -- 写文件)

[四、二进制文件 -- 读文件](#四、二进制文件 -- 读文件)


在程序运行时产生的数据属于临时数据,程序一旦运行结束会被释放。可以通过文件将数据持久化 ,C++中对文件操作需要包含头文件**<fstream>**

文件类型:

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

二进制文件:文本以文本的二进制形式存储在计算机中,用户一般读不懂【类似加密形式】

操作文件的三大类:

1、ofstream:写操作

2、ifstream:读操作

3、fstream:读写操作

一、文本文件 -- 写文件

步骤:

①写入头文件 #include <fstream>

②创建流对象 ofstream ofs

③打开文件 ofs.open("文件路径",打开方式); //如果文件路径没有指定,文件会自动放在和cpp同级的文件夹中

④写数据 ofs << "写入数据";

⑤关闭文件 ofs.close();

打开方式:(可以利用 "|" 操作符选择多个方式)【ios::in | ios::out】

ios::in -- 为读文件而打开文件

ios::out -- 为写文件而打开文件

ios::ate -- 初始位置:文件尾

ios::app -- 追加方式写文件

ios::trunc -- 如果文件存在先删除再创建

ios::binary -- 二进制方式

二、文本文件 -- 读文件

步骤:

①写入头文件 #include <fstream>

②创建流对象 ifstream ifs

③打开文件并判断是否打开成功

cpp 复制代码
ifs.open("文件路径",打开方式); 

if( !ifs.is_open() )
{
    cout << "文件打开失败" << endl;
    return;
}

④读数据 四种方式

cpp 复制代码
//第一种方式
char buf[1024] = {0}; //字符数组初始化为0
//将数据放入数组中,读完返回false退出while
while(ifs >> buf)
{
    cout << buf << endl;
}

//第二种方式
char buf[1024] = {0}; 
//利用成员函数getline获取一行数据
while(ifs.getline(buf,sizeof(buf)))
{
    cout << buf << endl;
}

//第三种方法
string buf;
while( getline(ifs,buf) )
{
    cout << buf << endl;
}

//第四种方式 不推荐效率低
char c;
while((c = ifs.get()) != EOF) //判断是否读到文件尾 end of file
{
    cout << << endl;
}

⑤关闭文件 ifs.close();

三、二进制文件 -- 写文件

打开方式必须是 ios::binary

写文件利用流对象调用成员函数write

函数原型:ostream& write(const char * buffer,int len)

步骤:

①写入头文件 #include <fstream>

②创建流对象并打开路径 ofstream ofs("xx.txt",ios::out | ios::binary)

④写数据

cpp 复制代码
Person p = {"张三",18};
ofs.write((const char *)&p, sizeof(Person));//将Person类型强转为char

⑤关闭文件 ofs.close();

四、二进制文件 -- 读文件

函数原型:istream& read(char * buffer,int len) //指针buffer指向内存中一段内存空间,字节数

①写入头文件 #include <fstream>

②创建流对象 ifstream ifs

③打开文件并判断是否打开成功

cpp 复制代码
ifs.open("xxx.txt",ios::in | ios::binary); 

if( !ifs.is_open() )
{
    cout << "文件打开失败" << endl;
    return;
}

④读数据

cpp 复制代码
Person p;
ifs.read((char *)&p, sizeof(Person));
相关推荐
upgrador4 分钟前
基础知识:C++ STL构造函数的左闭右开惯例及其实现原理
开发语言·c++
一楼的猫1 小时前
AI写作合规技术方案:平台检测机制分析与规避策略
人工智能·学习·机器学习·ai写作
yoothey1 小时前
报废审批流规则引擎设计——责任链模式完整实现
linux·开发语言·bash
geovindu1 小时前
python: Functional Options Pattern
开发语言·后端·python·设计模式·惯用法模式·函数式选项模式
wuyk5551 小时前
24. C 语言模块化:不是拆几个.c 文件那么简单
c语言·开发语言·stm32·单片机
四月天432 小时前
web安全-SSTI(服务器模板注入)
笔记·学习·web安全·网络安全
凯瑟琳.奥古斯特2 小时前
K次取反最大化数组和解法(力扣1005)
开发语言·c++·算法·leetcode·职场和发展
林中青木2 小时前
CT重构原理及C++代码实现
c++·计算机视觉·重构
AC赳赳老秦2 小时前
防火墙规则批量配置实战:OpenClaw 自动生成模板、批量下发与合规性校验全解析
java·开发语言·人工智能·python·github·php·openclaw
满天星83035772 小时前
Protobuf的介绍及使用
c++