包含头文件<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;
}
//方式三 string
string 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;
}
运行结果: