C++ 读取/写入流时缺少数据
以下是完整的示例-编译并运行,将映射的内容写入文件,然后立即读取:C++ 读取/写入流时缺少数据,c++,stl,ifstream,ofstream,C++,Stl,Ifstream,Ofstream,以下是完整的示例-编译并运行,将映射的内容写入文件,然后立即读取: #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;
#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;
}
问题是为什么读取的字节与写入的字节不匹配,以及如何读取/写入整个映射
p.S.Online compiler为我提供了32个读取字节的预期输出,在使用Visual Studio 2010 Professional进行编译时,我得到了错误的输出。请确保以二进制文件的形式打开该文件
0 103
1 2
5 26
22 4
wrote bytes..........32, map size 4
sizeof of input......32
read bytes...........20