2017-03-17 23 views
1

我创建了一个使用poco库文件FTPclientsession通过ftp下载二进制文件的C++应用程序。为了使用下面的代码,以计算字节的下载进度我将文件从一个IStream复制到一个ostream字节:将C++中的二进制文件从istream复制到ostream并不总是正确的

char c = 0; 
    istream is; 
    ostream os; 
std::streamsize iter = 0; 
is.get(c); 
while (istr && ostr) 
{ 
    ++iter; 
    os.put(c); 
    is.get(c); 
} 
return iter; 

当我尝试下载一个1MB的文件,该文件在FTP服务器由1048576个字节(使用stat命令进行检查),大多数情况下,iter永远不会达到这个数字,但是从1048573到1048575的值减少1-3个字节。
很少会测量到正确的大小。我还检查了is.fail()并注意到测量不正确的情况下设置了故障位。
这是一个二进制文件的问题,与服务器连接不好或者我的代码有问题?

回答

1

确保在二进制模式下打开输入和输出流,否则它将执行行结束转换,即根据平台取代ASCII代码10(\n){13,10}(\r\n)。

std::ofstream out("data.bin", std::ios::binary); 

你也永远不应该使用二进制流时使用的格式输入和输出操作(即operator >>operator <<)。你已经在使用get()put(),所以应该没问题。