包含头文件<fstream>
操作文件三大类:
- ofstream : 写文件
- ifstream :读文件
- fstream : 读写文件
5.1文本文件
-文件以ascii的形式存储在计算机中
5.1.1写文件
步骤:
- 包含头文件 #include "fstream"
- 创建流对象 ofstream ofs;
- 打开文件 ofs.open(“文件格式”,打开方式);
- 写数据 ofs << "写入数据";
- 关闭文件 ofs.close();
打开方式 | 解释 |
ios::binary | 二进制方式 |
ios::in | 为读文件而打开文件 |
ios::out | 为写文件而打开文件 |
ios::ate | 初始位置:文件尾 |
ios::app | 追加方式写文件 |
ios::trunc | 如果文件存在先删除再创建 |
注意:文件打开方式可配合使用,利用|操作符
例如:二进制方式尾部写入文件 ios::binary | ios::ate | ios::out
代码示例:
写文件简单代码示例:
#include "iostream"
#include "fstream"using namespace std;void test()
{std::ofstream ofs;ofs.open("test.txt",ios::out);ofs << "服了" << endl;ofs << "但不后悔" << endl;ofs.close();}
int main()
{test();return 0;
}
读文件简单演示(四种方式):
- 按行读取
- 按行读取数组接收
- 按行读取string接收
- 单个字符读取
代码示例:
#include "iostream"
#include "fstream"
#include "string"using namespace std;void read_file_test()
{std::ifstream ifs;ifs.open("test.txt", ios::in);if(ifs.is_open()){cout << "文件打开成功" << endl;}else{cout << "文件打开失败" << endl;return;}//方式一 按行读取char buff1[1024] = { 0 };while (ifs >> buff1){cout << buff1 << endl;}//方式二 char buff2[1024] = { 0 };while (ifs.getline(buff2, sizeof(buff2))){cout << buff2 << endl;}//方式三 stringstring buff_str;while (getline(ifs, buff_str)){cout << buff_str << endl;}//方式四 读取单个字符效率低char c;while ((c = ifs.get()) != EOF){cout << c;}ifs.close();}
int main()
{read_file_test();return 0;
}
5.2二进制文件
-文件以二进制的形式存储在计算机中
5.2.1写文件
主要利用流对象调用对象函数write
函数原型:ostream& write (const char* buffer,int len);
buffer 指向内存中一段存储空间,len是写入的字节数
代码示例:
#include "iostream"
#include "fstream"
using namespace std;
using namespace std;
//二进制的形式不只可以操作基本类型也可以操作自定义类型
class dog
{
public:char m_name;int m_age;
public:dog(){m_name = 'A';m_age = 19;}
};
void write_file_binary()
{std::ofstream ofs;ofs.open("write_file_binary.txt", ios::out | ios::binary);dog d;string s = "无语";ofs << "无语" << endl;ofs.write((const char*)&d, sizeof(dog));ofs.write((const char*)&s, sizeof(s));ofs.close();
}
int main()
{write_file_binary();system("pause");return 0;
}
运行结果:
5.2.2读文件
主要利用流对象调用对象函数read
函数原型:istream& read(char *buffer,int len);
buffer指向内存中一段存储空间,len是读的字节数。
代码示例:
#include "iostream"
#include "fstream"
using namespace std;
using namespace std;
//二进制的形式不只可以操作基本类型也可以操作自定义类型
class dog
{
public:char m_name;int m_age;
public:dog(){m_name = 'A';m_age = 19;}
};
void read_file_binary()
{std::ifstream ifs;ifs.open("write_file_binary.txt", ios::in | ios::binary);if (ifs.is_open()){}else{cout << "打开失败!" << endl;}dog d;ifs.read((char*)&d, sizeof(dog));cout << "d.name :" << d.m_name << " " << "d.age :" << d.m_age << endl;ifs.close();
}
int main()
{read_file_binary();system("pause");return 0;
}
运行结果: