用C+复制二进制文件+;从istream到ostream并不总是正确的 我创建了一个C++应用程序,它使用POCO LabaReFPTclipse会话通过FTP下载二进制文件。为了计算下载进度,我使用以下代码将文件从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;

用C+复制二进制文件+;从istream到ostream并不总是正确的 我创建了一个C++应用程序,它使用POCO LabaReFPTclipse会话通过FTP下载二进制文件。为了计算下载进度,我使用以下代码将文件从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;,c++,ftp,ostream,istream,C++,Ftp,Ostream,Istream,当我试图下载一个1MB的文件,该文件在ftp服务器中由1048576字节组成(使用stat命令检查),大多数情况下,iter从未达到这个数字,但从1048573到1048575的值减少了一到三个字节。 它很少测量到正确的尺寸。我还检查了is.fail(),注意到在测量不正确的情况下,设置了failbit。 这是二进制文件的问题、与服务器的连接不良还是我的代码的问题 确保以二进制模式打开输入和输出流,否则它将执行行结束转换,即根据平台将ASCII代码10(\n)替换为{13,10}(\r\n) s

当我试图下载一个1MB的文件,该文件在ftp服务器中由1048576字节组成(使用stat命令检查),大多数情况下,iter从未达到这个数字,但从1048573到1048575的值减少了一到三个字节。
它很少测量到正确的尺寸。我还检查了is.fail(),注意到在测量不正确的情况下,设置了failbit。

这是二进制文件的问题、与服务器的连接不良还是我的代码的问题

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

std::ofstream out("data.bin", std::ios::binary);
您也不应该使用格式化的输入和输出操作(即
运算符>>
运算符)