文章目录
一、简介
程序运行时产生的数据都属于临时数据,程序一旦运行结束都会释放,可以通过
读写操作将数据持久化
c++中对文件的操作必须要引入头文件< fstream >
1.1 文件类型
对于读写操作来说,文件类型分为两种:
-
文本文件 ——以文本的
ASCII
码形式存储在计算机中 -
二进制文件——以文本的
二进制
形式存储在计算机中,用户一般不能读懂,需要编译
1.2 C++中操作文件的三大类
- ofstream:进行写操作,o表示output,f表示file
- ifstream:进行读操作,i表示input
- fstream:读写操作
二、linux中写文件
2.1 步骤
(1)引入头文件
#include <fstream>
(2)创建写入流对象
ofstream ofs;
(3)打开文件
ofstream.open("文件路径",打开方式);//文件路径可以使绝对路径,打开方式件1.2
(4)写数据
ofs << "要写入的数据" << endl;
(5)关闭流
ofs.close();
2.2 文件打开方式
代码 | 说明 |
---|---|
ios::in | 读文件时打开 |
ios::out | 写文件时打开,会覆盖上次写入操作 |
ios::ate | 打开文件初始位置在文件尾 |
ios::app | 以追加方式写文件 |
ios::trunc | 如果文件存在,则先删除后创建 |
ios::binary | 以二进制的方式打开文件 |
注意
:文件打开方式可以复合使用,用“|”隔开
例如
:用二进制方式写文件:
ios::binary | ios::out
2.3 linux中写文件DEMO
(1)创建FileRead.cpp文件(这里文件名应改为FileWrite.cpp)
vim FileRead.cpp
(2)编写程序
#include <iostream>
#include <fstream>//1.引入操作文件类的头文件
using namespace std;
//读文件的方法
void readFile()
{
//2.创建文件流对象
ofstream ofs;
//3.打开文件,如果没有,会在同级目录下自动创建该文件
ofs.open("file.txt",ios::app);//采取追加的方式写入文件
//4.写入文件
ofs << "abcdefg" << endl;
ofs << "fijklmn" << endl;
//5.关闭流
ofs.close();
}
//main方法调用
int main()
{
readFile();
cout << "操作成功,请按任意键继续...";//linux中不能用system("pause")方法,采取这种方式进行提示
cin.clear();
cin.sync();//清空缓存区
cin.get();//接受键盘输入
return 0;
}
(3)编译cpp文件
g++ FileRead.cpp
(4)查看文件内容
三、linux中读文件
3.1 步骤
linux中读文件操作和写文件操作步骤类似:
(1)引入头文件
#include <fstream>
(2)创建读取流对象
ifstream ifs
(3)打开文件并判断文件是否打开成功
ifs.open("文件路径",打开方式);
(4)读取数据
有五中读数据的方式,见1.2
(5)关闭流
ifstream. close();
3.2 读取文件的方式
总共有物种读取文件的方式
(1)直接读取所有内容,以空格换行
int main()
{
ifstream ifs;
ifs.open("file.txt", ios::in);
if (!infile.is_open())
{
cout << "读取文件失败" << endl;
return;
}
//第一种读取方法,
char buf[1024] = { 0 };
while (infile>>buf)
{
cout << buf << endl;//输出读取的文本文件数据
}
}
(2)char型数组一行一行读取,可读取空格
int main()
{
ifstream ifs;
ifs.open("file", ios::in);
if (!infile.is_open())
{
cout << "读取文件失败" << endl;
return;
}
//第二种读取方法
char buf[1024]={ 0 };
while (infile.getline(buf,sizeof(buf)))
{
cout << buf << endl;
}
}
(3)字符串一行一行读取,可读取空格
int main()
{
ifstream ifs;
ifs.open("file.txt", ios::in);
if (!infile.is_open())
{
cout << "读取文件失败" << endl;
return;
}
//第三种读取方法
string buf;
while (getline(infile,buf))
{
cout << buf << endl;
}
}
(4)
字符读取,可读空格,效率低
int main()
{
ifstream ifs;
ifs.open("file.txt", ios::in);
if (!infile.is_open())
{
cout << "读取文件失败" << endl;
return;
}
//第四种读取方法
char c;
while ((c=infile.get())!=EOF)
{
cout << c;
}
}
(5)存入至vector容器中
int main()
{
ifstream ifs;
ifs.open("file.txt", ios::in);
if (!infile.is_open())
{
cout << "读取文件失败" << endl;
return;
}
//第五种读取方法
string s;
vector<string>v1;
while (getline(infile,s))
{
infile >> s;
v1.push_back(s);
}
for (int i = 0; i < v1.size(); i++)
{
cout << v1.at(i);
cout << endl;
}
infile.close();
}
3.3 linux中写文件demo
(1)创建FileRead.cpp文件
vim FileRead.cpp
(2)编写程序
#include <iostream>
#include <fstream>
using namespace std;
void fileRead()
{
ifstream ifs;
ifs.open("file.txt",ios::in);
//没有找到指定文件就返回
if(!ifs.is_open())
{
cout << "没有找到指定文件";
return;
}
//进行读文件操作
char buf[1024] = {0};
while(ifs >> buf)
{
cout << buf << endl;
}
ifs.close();
}
int main()
{
fileRead();
cout << "请按任意按钮继续...";
cin.clear();
cin.sync();
cin.get();
return 0;
}
(2)编译cpp文件
g++ FileRead.cpp
(3)查看输出
cat file.txt
文本文件内容
第一种方式结果:
第二、三、四、五种方式结果: