在fstream头文件中包含的可以用于文件操作的类不只ifstream和ofstream,这两种类分别只能进行读取和写入的操作。在使用起来的时候虽然较为安全,但是不是非常的方便。fstream头文件还为文件操作提供了另外一种类:fstream。
fstream类可以对文件进行读取和写入两种操作。而且在使用的时候用法和ifstream以及ofstream的用法是相同的。对于这种情况,在使用起来的时候也是比较的方便。但是因为使用的多样,导致其在使用的时候需要注意细节以防止对文件进行错误的操作。
本次,采用类封装的方式通过fstream来实现一个写入和读取文件的小的案例。如下:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
class File
{
private:
fstream m_fs;
string m_filename;
string m_name;
int m_age;
int m_number;
void save()
{
this->m_fs << this->m_name << endl;
this->m_fs << this->m_age << endl;
}
public:
File(string filename = "./111.txt")
{
this->m_filename = filename;
this->m_number = 0;
}
void Write()
{
this->m_fs.open(this->m_filename, ios::out);
int number;
cout << "Please input number: ";
cin >> number;
int i;
for (i = 0; i < number; i++)
{
cout << "Please input your name: ";
cin >> this->m_name;
cout << "Please input your age: ";
cin >> this->m_age;
save();
}
this->m_number = i;
this->m_fs.close();
}
void Read()
{
this->m_fs.open(this->m_filename, ios::in);
if (!this->m_fs.is_open()) return;
cout << "NAME\t" << "AGE" << endl;
for (int i = 0; i < this->m_number; i++)
{
this->m_fs >> this->m_name >> this->m_age;
cout << this->m_name << "\t" << this->m_age << endl;
}
this->m_fs.close();
}
};
int main()
{
File * file = new File;
file->Write();
file->Read();
delete file;
return 0;
}
在示例中,我们不仅仅在共有属性下写入了函数,在私有属性下也写入了函数。但是因为save函数不需要对外提供,仅仅在类中使用,所以将其写在私有属性之中。
此外,不难发现,在类中私有属性的成员的名称前面使用了统一的“m_”的前缀,通过这种方式可以防止形参和私有属性重名。
另外,本次在读取文件的时候是通过一个记录读取数量的属性m_number来进行限制的,并非使用的eof成员函数。而且文件的打开和关闭都是成对在一个函数中出现的。
通过这样的方式,就可以基本实现对文件的写入和读取的操作了。读者可以自己动手尝试为代码进行优化或者添加新的功能。