原文地址http://www.javayihao.top/detail/168 一:概述 1.程序在运行中产生的数据都是临时数据,程序一旦运行结束会被释放,可以通过文件相关的操作将数据持久保存。 2.文件类型有文本文件(文件以文本的ASCLL码形式存储在计算机中)和二进制文件(文件以文本的二进制形式存储在计算机中,用户一般直接读不懂他们)。 3.C++中对文件操作需要包含头文件<fstream>,涉及到的三大文件操作类:ofstream写操作类;ifstream读操作类;fstream读写操作类。</fstream> 二:文本文件读写操作 写文件 第1步:包含头文件#include<fstream></fstream> 第2步:创建流对象ofstream ofs 第3步:打开文件ofs.open("文件路径",打开方式) 第4步:写文件ofs<<"写入数据" 第5步:关闭文件ofs.close() 注意: 1.文件的打开方式 2.打开方式可以通过|操作符配合使用,如打开二进制写文件 ios::binary|ios:out 3.创建流对象ofstream也可以选择fstream读写类 案例代码 #include<iostream></iostream> using namespace std; //第1步 #include<fstream>int main() {</fstream> //第2步 ofstream ofs; //第3步 当前同级目录生成test文件 ofs.open("test.txt",ios::app); //第4步 ofs << "helloword"; //第5步 ofs.close(); } 读文件 第1步:包含头文件#include<fstream></fstream> 第2步:创建流对象ifstream ifs 第3步:打开文件ifs.open("文件路径",打开方式)判断是否打开成功,打开方式和上面写文件一样 第4步:读数据 第5步:关闭文件ifs.close() 案例代码 #include<iostream></iostream> using namespace std; //第1步 #include<fstream></fstream> void test() { //第2步 ifstream ifs; //第3步 ifs.open("test.txt", ios::in); if (!ifs.is_open()) { cout << "文件打开失败"; return; } //第4步 char buf[1024] = { 0 }; //字符数组初始化为0 while (ifs >> buf) { //循环全部读完 cout << buf << endl; } //第5步 ifs.close();} int main() { test();} 注意:第4步读数据方式有四种。其他三种如下 //第二种 char buf[1024] = { 0 }; while (ifs.getline(buf,sizeof(buf))){//一行一行读取 cout << buf << endl; } //第三种 #include<iostream></iostream> #include<string></string> using namespace std; //第1步 #include<fstream>void test() {</fstream> //第2步 ifstream ifs; //第3步 ifs.open("test.txt", ios::in); if (!ifs.is_open()) { cout << "文件打开失败"; return; } //第4步 string buf; while (getline(ifs,buf)){ //使用string中的全局函数getline一行行读取,需要导入string头文件 cout << buf << endl; } //第5步 ifs.close();} int main() { test();} //第四种 #include<iostream></iostream> using namespace std; //第1步 #include<fstream></fstream> void test() { //第2步 ifstream ifs; //第3步 ifs.open("test.txt", ios::in); if (!ifs.is_open()) { cout << "文件打开失败"; return; } //第4步 char c; while ((c=ifs.get())!=EOF){//一个一个字符读取、效率不高 cout << c; } //第5步 ifs.close();} int main() { test();} 三:二进制文件读写操作 1.二进制方式对文件操作,打开方式指定为ios::binary,二进制文件不仅可以对内置数据类型的数据操作,还可以对对象类型操作。 2.写入的二进制文件出现乱码不用处理,只要读到的正确即可 写文件 #include<iostream>using namespace std;</iostream> //第1步 头文件 #include<fstream></fstream> class person { public: char name[54];//涉及到字符串读写,不要使用c++的string,而是用c的char int age;}; void test() { //第2步 流对象 ofstream ofs; //第3步 打开文件 ofs.open("test.txt", ios::out|ios::binary); //第4步写文件 person p = { "李四",12 }; ofs.write((const char *)&p,sizeof(p)); //第5步关闭 ofs.close();} int main() { test();} 读文件 #include<iostream></iostream> using namespace std; //第1步 #include<fstream></fstream> class person { public: char name[54]; int age; }; void test() { //第2步 ifstream ifs; //第3步 ifs.open("test.txt", ios::in|ios::binary); if (!ifs.is_open()) { cout << "文件读取失败"; return; } //第4步 person p ; ifs.read((char *)&p,sizeof(p)); cout << p.name << p.age; //第5步 ifs.close();} int main() { test();}