使用c ++代码复制.pdf文件

时间:2013-11-14 08:29:50

标签: visual-c++ networking

我正在尝试编写一个代码,该代码应该能够以任何格式制作文件的副本。目前,我正在尝试.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;
}

现在的问题是重复文件被破坏或者比原始文件更小/更大。并且也不包含任何文字。 我正在为我的计算机网络项目编写此代码,我必须从服务器向客户端发送任何格式的文件。

1 个答案:

答案 0 :(得分:2)

我认为这是因为你使用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旗帜有什么影响。也许你感到困惑的是它会改变operator<<的行为,但事实并非如此。我希望它有助于改变缓冲模式或其他东西。