首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在c++中读取和写入文件

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

Stack Overflow用户
提问于 2010-01-09 01:16:11
回答 4查看 493关注 0票数 1

我正在尝试将一个三元向量写到一个文件中,然后能够读回数据结构。当我尝试在文件保存后读回文件时,前50个值是正确的,但其余的值都是垃圾。如果有人能帮我的话我会很感激的。非常感谢!

文件声明:

代码语言:javascript
复制
    fstream memory_file("C:\\Users\\Amichai\\Pictures\\output.txt", ios::in | ios::out);    

保存功能:

代码语言:javascript
复制
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));
           }
       }
   } 
 }

Read函数:

代码语言:javascript
复制
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;
               }
           }
     } 
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-01-09 01:23:08

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

票数 3
EN

Stack Overflow用户

发布于 2010-01-09 01:48:41

问题是,您正在将二进制形式的数值写入流处理器解释为文本的文件中。使用二进制文件(使用ios:: binary )或在写入文件之前将数字转换为字符串。

票数 0
EN

Stack Overflow用户

发布于 2010-01-09 01:54:03

www.booost.org上查看Boost.Serialization库。它知道如何在文件中读取和写入STL集合。不过,我不知道它是否能处理嵌套容器。

您可能还想对三维数据使用Boost.Multiarray。如果您要对数据进行矩阵数学运算,那么您可能希望使用Boost.uBlas。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2029283

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档