c++ - 在c++中读取和写入文件

标签 c++

我正在尝试将三重 vector 写入文件,然后能够读回数据结构。当我在保存文件后尝试读回文件时,前五十个值是正确的,但其余值都是垃圾。如果有人能在这里帮助我,我将不胜感激。非常感谢!

文件声明:

    fstream memory_file("C:\\Users\\Amichai\\Pictures\\output.txt", ios::in | ios::out);    

保存功能:

void save_training_data(fstream &memory_file, vector<vector<vector<long double> > > &training_data)
 {
   int sizeI = training_data.size();
   memory_file.write((const char *)&sizeI, sizeof(int));
   for (int i=0; i < sizeI; i++)
   {
       int sizeJ = training_data[i].size();
       memory_file.write((const char *)&sizeJ, sizeof(int));
       for (int j=0; j < sizeJ; j++) 
       {
           int sizeK = training_data[i][j].size();
           memory_file.write((const char *)&sizeK, sizeof(int));
           for (int k = 0; k < sizeK; k++)
           {
               int temp;
               temp = (int)training_data[i][j][k];
               memory_file.write((const char *)&temp, sizeof(int));
           }
       }
   } 
 }

读取函数:

void upload_memory(fstream &memory_file, vector<vector<vector<long double> > > &training_data)
{
     memory_file.seekg(ios::beg);
     int temp=0;
     int sizeK, sizeJ, sizeI; 
     memory_file.read((char*)&sizeI, sizeof(int));
     training_data.resize(sizeI);
     for (int i=0; i < sizeI; i++)
     {
           memory_file.read((char*)&sizeJ, sizeof(int));
           training_data[i].resize(sizeJ);           
           for (int j=0; j < sizeJ; j++)
           {
               memory_file.read((char*)&sizeK, sizeof(int));
               training_data[i][j].resize(sizeK);
               for (int k = 0; k < sizeK; k++)
               {
                    memory_file.read((char*)&temp, sizeof(int));
                    training_data[i][j][k]=temp;
               }
           }
     } 
}

最佳答案

由于您正在编写二进制数据(显然是在 Windows 下工作),因此您确实需要在打开 fstream 时指定 ios::binary。

关于c++ - 在c++中读取和写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2029283/

相关文章:

c++ - C++ 类的私有(private)成员和 protected 成员有什么区别?

c++ - 从欧拉角到四元数和后退的 GLM 转换不成立

c++ - 通过右值引用获取参数的所有权

最近的 MSVC 中的 C++ 模板解析错误,GCC、LLVM 和较旧的 MSVC 正常

c++ analog for rust like 同步

c++ - float 到Arduino编译错误

c++ - 存储双指针地址并检索其值

c++ - 尝试打印正确数量的 '*' 代替数值

c++ - C++中将一个区间分成n等份

c++ - 使用 Xcode 嵌入 Lua