文章目录
零、文件操作的概念
一、文本文件
1.写文本文件
1.文件打开方式
2.步骤
3.代码
cpp
//文本文件 : 写文件
#include <iostream>
#include <fstream> //1.包含头文件
using namespace std;
int main(){
//2.创建流对象
ofstream ofs;
//3.指定打开方式 : 写文件
ofs.open("text.txt",ios::out);
//4.写内容
ofs << "HelloWorld!" << endl;
ofs << "I'm Edward! A great programmer in the future!" << endl;
//5.关闭文件
ofs.close();
return 0;
}
2.读文本文件 (4种方法)
1.步骤
2.四种读文件方式
(1)字符数组
cpp
char buf[1024] = {0};
while(ifs >> buf){
cout << buf << endl; //每个单词作为一行读进程序
}
(2)getline
cpp
char buf[1024] = {0};
while(ifs.getline(buf,sizeof(buf))){
cout << buf << endl;
}
(3)string + getline
cpp
string buf;
while(getline(ifs,buf)){
cout << buf << endl;
}
(4)单个字符读取,效率低,不推荐
cpp
char c;
while( (c = ifs.get()) != EOF){
cout << c;
}
3.完整代码
注意先将上一节写好的文件,复制到指定位置才能读取文件
cpp
//文本文件 : 读文件
#include <iostream>
#include <fstream> //1.包含头文件
#include <string>
using namespace std;
int main(){
//2.创建流对象
ifstream ifs;
//3.打开文件,并判断是否打开成功
ifs.open("text.txt",ios::in);
if(!ifs.is_open()){
cout << "文件打开失败" << endl;
return 0;
}
//4.读数据 (四种方式)
//①第一种
// char buf[1024] = {0};
// while(ifs >> buf){
// cout << buf << endl; //每个单词作为一行读进程序
// }
//②第二种
// char buf[1024] = {0};
// 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){
cout << c;
}
//5.关闭文件
ifs.close();
return 0;
}
4.总结
二、二进制文件
1.写二进制文件
1.关键步骤
cpp
ofs.write( (const char *)&p, sizeof(p));
2.完整代码:
运行成功后,自己到程序所在同级目录找到,写好的文件。
cpp
//写二进制文件
#include <iostream>
#include <fstream> //1.包含头文件
using namespace std;
class Person{
public:
char m_Name[64];
int m_Age;
};
int main(){
//2.创建流对象
ofstream ofs;
//3.打开文件
ofs.open("person.txt",ios::out | ios::binary); //二进制方式写文件
//4.写文件
Person p = {"Edward",25};
ofs.write( (const char *)&p, sizeof(Person)); //Person * 强转为 const char *
//5.关闭文件
ofs.close();
return 0;
}
3.补充
②创建流对象 + ③打开文件,可以合并为一步:
cpp
ofstream ofs("person.txt",ios::out | ios::binary);
4.举例:把pdf文件的数据 用二进制方式 写入内存缓冲区buffer
[ofstream对象命名为outfile,创建流对象和打开文件合并为一步]
cpp
#include <fstream>
using namespace std;
ofstream outfile("/home/edward/YR/out.pdf", ios::binary);
outfile.write( buffer, length );
2.读二进制文件
1.关键步骤
cpp
ifs.read( (char *)&p, sizeof(p));
2.完整代码
同样,需要把上一节写好的二进制文件,放到本程序的同级目录下
cpp
//二进制读文件
#include <iostream>
#include <fstream> //1.包含头文件
using namespace std;
class Person{
public:
char m_Name[64];
int m_Age;
};
int main(){
//2.创建流对象
ifstream ifs;
//3.打开文件并判断
ifs.open("person.txt",ios::in | ios::binary);
if( !ifs.is_open()){
cout << "文件打开失败" << endl;
return 0;
}
//4.读文件
Person p;
ifs.read( (char*)&p, sizeof(Person));
cout << "姓名: " << p.m_Name << endl << "年龄: " << p.m_Age << endl;
//5.关闭文件
ifs.close();
return 0;
}
3.总结