C++ 使用fstream读取文件会损坏数据

C++ 使用fstream读取文件会损坏数据,c++,file,fstream,corrupt,resource-files,C++,File,Fstream,Corrupt,Resource Files,在使用VC11编译器的Visual Studio 2013中,我尝试实现自动生成增量,因此我尝试使用fstream读取包含版本信息的资源文件,但问题是,在我将其重写回文件后,加载的内容有一半被损坏,例如被汉字损坏。 我是这样读文件的: mFile.open(mParams.tFilename.c_str(), std::fstream::in); if (!mFile.is_open()) { cerr <&

在使用VC11编译器的Visual Studio 2013中,我尝试实现自动生成增量,因此我尝试使用fstream读取包含版本信息的资源文件,但问题是,在我将其重写回文件后,加载的内容有一半被损坏,例如被汉字损坏。 我是这样读文件的:

        mFile.open(mParams.tFilename.c_str(), std::fstream::in);

        if (!mFile.is_open())
        {
                cerr << "ReadFile:Cannot open file!\n";
                return false;
        }

        string line = ""; 
        mFileContent.clear();
        while (getline(mFile, line))
        {
                mFileContent.push_back(line);
        }
  mFile.open(mParams.tFilename.c_str(), std::fstream::out  std::fstream::trunc);
  std::ostream_iterator<std::string> output_iterator(mFile, "\n");
            std::copy(mFileContent.begin(), mFileContent.end(), output_iterator);
mFile.open(mParams.tFilename.c_str(),std::fstream::in);
如果(!mFile.is_open())
{

cerr以二进制模式打开文件。似乎您不想读取文本,而想读取二进制数据。我必须以文本模式读取它,因为我用版本信息更改了行。仅出于演示目的,我读取文件并将其写回,但效果相同。@mbed_dev“我必须以文本模式读取”不,您没有。如果这是真的,则在您使用
fstream
修改文件之前存在的文件不可能存在。还有其他读取和写入文件数据的方法。