C++利用一个fstream流读写文件

fstream对象可以同时具有ifstreamofstream的功能,尝试使用一个流对文件进行读写的代码如下:

#include 
#include 
using namespace std;

int main()
{
    char data[200];
    fstream  afile;
    afile.open("afile.dat", ios::app|ios::out|ios::in);
    cin>>data;
    //将数据写入文件
    afile<>data;
    cout<

向文件中输入111111,并从文件中成功读取出来


第二次运行向文件中输入2222222,由于使用了ios::app追加的文件打开模式,所以应该在111111后面加入了222222,期望输出1111122222,可实际只输出了222222



这是因为使用了ios::app模式导致文件定位到末尾,所以读出的数据是从222222开始的。

 如果要从头输出文件,则应该使用afile.seekg(ios::beg);,让文件重新定位到开头,代码如下

#include 
#include 
using namespace std;

int main()
{
char data[200];
fstream  afile;
    afile.open("afile.dat", ios::app|ios::out|ios::in);
    cin>>data;
    cin.ignore();
    afile<>data;
cout<

运行后成功输出文件中所有数据


总结:使用一个fstream虽然可以同时进行读写,但也会因为文件指针的位置造成编程上的困难,当 C++ 程序终止时,它会自动关闭刷新所有流,释放所有分配的内存,并关闭所有打开的文件。但程序员应该养成一个好习惯,在程序终止前关闭所有打开的文件。程序的异常退出可能会导致还未写入文件还留在缓冲中的数据丢失,因此使用ifstream和ofstream进行读写后立即关掉文件比一直使用一个fstream进行读写也更安全。


有错误欢迎指出


你可能感兴趣的:(C++利用一个fstream流读写文件)