我正在尝试编写代码,该代码应能够以任何格式复制文件的副本。目前,我正在尝试使用.pdf格式。这是我编写的代码:
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
ifstream in("a.pdf", ios::binary);
if(in.fail())
{
cout<<"\nThe file couldn't be opened\n";
exit(0);
}
ofstream out("b.pdf", ios::binary);
while(!in.eof())
{
char buf[1000];
in.read(buf, sizeof(buf));
out<<buf;
}
in.close();
out.close();
return 0;
}
现在的问题是,重复文件要么已损坏,要么比原始文件小/大。并且也不包含任何文本。我正在为我的计算机网络项目使用此代码,在该项目中,我必须将任何格式的文件从服务器发送到客户端。
我认为发生这种情况是因为您正在使用operator<<
输出,该输出旨在用于格式化的字符串,而不是二进制数据。std::ostream.write()
是read
用于二进制/未格式化数据的计数器部分。
while(!in.eof())
{
char buf[1000];
in.read(buf, sizeof(buf));
out.write(buf, sizeof(buf));
}
operator<<(char*)
可能会停在第一个“奇怪字符”上。即使在文本情况下,它也不保证输出将与输入相同,因为这会导致使用格式标记更改格式输出流。
其实我不太确定ios::binary
flag的影响是什么。也许您感到困惑,因为它会改变的行为,operator<<
但不会改变。我希望它有助于更改缓冲模式或其他内容。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句