文件操作
写在后面
<u>ofstream写文件,也就是对文件的输入,所以out,以O结尾</u>
<u>ofstream的成员函数中蕴含write写文件</u>
<u>ifstream读文件,也就是文件对外输出,所以in,以I结尾</u>
<u>ifstream的成员函数中蕴含read读文件</u>
操作文件蕴含头文件fstream
类型:
文本文件:ASCLL存储
二进制文件:二进制存储
操作文件三大类
1、ofstream:写操作
2、ifstream:读操作
3、fstream:读写操作
文本文件操作
写文件
1、蕴含头文件
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<fstream>using namespace std;void test(){ //1、蕴含头文件 //2、创立流对象 ofstream ofs; //3、关上文件 ofs.open("材料.txt",ios::out); //4、写数据 ofs << "此情可待成追忆,只是过后已惘然"; //5、敞开文件 ofs.close();}int main(){ test(); system("pause");}
总结:
文件操作必须蕴含头文件fstream
读文件能够利用ofstream,或者fstream类
关上文件时候须要操作文件的门路,以及打开方式
利用<<能够向文件中写数据
操作结束要敞开文件
读文件
1、蕴含头文件
2、创立流对象
ifstream ifs
3、关上文件判断是否关上
ifs.open(“材料”,iOS::in);
ifs.is_open返回布尔类型用if语句判断文件是否关上胜利
4、读数据(四种办法)
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 bufwhile(getline(ifs,buf)){cout<<buf<<endl;}
4/不举荐char c;while((c=ifs.get())!=EOF)//end of file{cout<<c;}
5、敞开文件
ifs.close()
#include<iostream>#include<fstream>#include<string>using namespace std;void test(){ //1、蕴含头文件 //2、创立流对象 ifstream ifs; //3、关上文件 ifs.open("材料.txt", ios::in); if (ifs.is_open() == false) { cout << "文件关上失败!" << endl; } //4、读数据 string buf; while (getline(ifs, buf)) { cout << buf << endl; } //5、敞开文件 ifs.close();}int main(){ test(); system("pause");}
二进制文件操作
写文件
ios::binary
二进制形式写文件次要利用流对象调用成员函数write
函数原型:ostream& write(const char* buffer ,int len)
参数解释:字符指针buffer 指向内存中一段存储空间,len是读写的字节数
#include<iostream>#include<fstream>#include<string>using namespace std;class Person{public: char name[64]; int age;};void test(){ //1、蕴含头文件 //2、创立流对象 ofstream ofs; //也能够创立流对象时候间接ifstream ifs("材料.txt",ios::out|ios::binary); //3、关上文件 ofs.open("材料.txt", ios::out | ios::binary);//用二进制的形式关上文件 //4、写文件 Person p = { "张三",18 }; ofs.write ((const char*)&p, sizeof(Person));//依据函数要求,对p进行强转 //5、敞开文件 ofs.close();}int main(){ test(); system("pause");}
读文件
二进制形式读文件次要利用流对象调用成员函数read
函数原型istream& read(char * bufer,int len);
参数解释:字符指针buffer指向内存中的一段存储空间,len是读写的字节数
#include<iostream>#include<fstream>#include<string>using namespace std;class Person{public: char name[64]; int age;};void test(){ //1、蕴含头文件 //2、创立流对象 ifstream ifs; //3、关上文件 ifs.open("材料.txt", ios::in | ios::binary); if (ifs.is_open() == false) { cout << "文件关上失败!" << endl; return; } //4、读文件 Person p; ifs.read((char*)&p, sizeof(Person)); cout << "姓名:" << p.name << "年龄" << p.age << endl; //5、敞开文件 ifs.close();}int main(){ test(); system("pause");}