1

谁能告诉我这有什么问题?

#include <stdio.h>
#include <fstream>
#include <iostream>
#include <sstream>
#include <vector>

class writeManager
{
    std::vector<double> valueVector;
    std::ofstream ofsFile;

public:

    writeManager(void);
    void writeOnFile(int);
    void openOfsStreams(void);
    void closeOfsStreams(void);

};

writeManager::writeManager(void)
{
    openOfsStreams();
    ofsFile << "FIRST LINE" << std::endl;
    closeOfsStreams();
}

void writeManager::writeOnFile(int input)
{
    openOfsStreams();

    if(ofsFile.good())
    {
        ofsFile << input << std::endl;
    }
    else
    {
        std::cout << "Hey!" << std::endl;
    }

    ofsFile.close();
}

void writeManager::openOfsStreams(void)
{
    ofsFile.open("/home/user/example.txt");
}

void writeManager::closeOfsStreams(void)
{
    ofsFile.close();
}

int main()
{
    writeManager writeObject;
    for (unsigned int i = 0; i!= 5; i++)
    {
        writeObject.writeOnFile(i);
    }
}

我想在文件“example.txt”上看到这个输出

FIRST LINE
0
1
2
3
4

但我只得到

4

PS:没有“嘿!” 被打印。

4

2 回答 2

4

问题是您多次打开和关闭文件,每次打开文件时都会破坏以前存在的内容。

可能您应该只在构造函数中打开文件一次(并且不要在那里关闭文件)。

另一种方法是以“追加”模式打开文件,但这会非常低效,打开文件是一项昂贵的操作。正如丽和建议的那样

ofsFile.open("/home/user/example.txt", std::ofstream::out | std::ofstream::app);
于 2013-10-12T10:57:00.103 回答
2

当您ofstream多次打开时,它总是从头开始重写。

一种可能的解决方案是使用app标志,即更改:

ofsFile.open("/home/user/example.txt");

ofsFile.open("/home/user/example.txt", std::ofstream::out | std::ofstream::app);

然而更好的是ofstream在构造函数中只打开一次并在析构函数中关闭它。

于 2013-10-12T10:57:11.353 回答