2013-06-21 64 views
3

下面是完整的例子 - 编译和运行,将文件写入地图的内容,右后读取它:丢失数据读取时/写入流

#include <map> 
#include <fstream> 
#include <iostream> 
using namespace std; 

int main(int argc, char* argv[]) 
{ 
    std::string fname("test.bin"); 

    std::map<unsigned,unsigned> testMap; 
    testMap[0]=103; 
    testMap[1]=2; 
    testMap[5]=26; 
    testMap[22]=4; 

    std::ofstream output(fname.c_str(),std::ios_base::binary|std::ios_base::trunc); 
    for(std::map<unsigned,unsigned>::iterator iter = testMap.begin();iter != testMap.end();++iter) 
    { 
     unsigned temp = iter->first; 
     output.write((const char*)&temp,sizeof(temp)); 
     unsigned temp1 = iter->second; 
     output.write((const char*)&temp1,sizeof(temp1)); 
     std::cerr << temp <<" "<<temp1<<" "<<std::endl; 
    } 
    std::cerr << "wrote bytes.........."<<output.tellp()<<", map size "<<testMap.size()<<std::endl; 
    output.flush(); 
    output.close(); 

    std::ifstream input(fname.c_str()); 
    // retrieve length of file: 
    input.seekg (0, input.end); 
    unsigned streamSize = input.tellg(); 
    input.seekg (0, input.beg); 

    char* buff = new char[streamSize]; 
    input.read(buff,streamSize); 
    cerr << "sizeof of input......"<<streamSize << endl; 
    cerr << "read bytes..........."<<input.gcount() << endl; 
    ::getchar(); 
    return 0; 
} 

它提供了以下的输出:

0 103 
1 2 
5 26 
22 4 
wrote bytes..........32, map size 4 
sizeof of input......32 
read bytes...........20 

问题是为什么读取的字节与写入的字节不匹配,以及如何读取/写入整个地图。

P.S.在线编译器为我提供了32个读取字节的预期输出,在使用Visual Studio 2010 proffesional进行编译时出现错误输出。

回答

2

确保您打开的文件是一个二进制文件。

+0

非常感谢,它的作品! –

相关问题