【发布时间】:2014-07-12 23:05:43
【问题描述】:
我在std::istream 中有一些数据,我需要将其保存到磁盘。这是我的草稿:
std::istream& i_stream = ReceiveBytes();
FILE* pFile;
pFile = fopen("C:\\my_file.exe", "wb");
char buffer[1024] = {0x0};
i_stream.read(buffer, 1024);
std::streamsize n = i_stream.gcount();
while (n > 0)
{
if (i_stream)
{
fwrite(buffer, sizeof(char), sizeof(buffer), pFile);
i_stream.read(buffer, 1024);
n = i_stream.gcount();
}
else n = 0;
}
fclose(pFile);
由于某种原因,我没有保存来自i_stream 的所有数据,我在i_stream 的末尾丢失了大约50 个字节。我在代码中做错了什么?有没有更好的解决方案将数据从std::istream 保存到文件中?
【问题讨论】:
-
在最后一次调用
i_stream.read()之后,if (i_stream)可能会失败,所以最后的fwrite不会被调用。 -
另外,在
fwrite你应该写n字节,而不是sizeof(buffer)字节。