2011-11-30 157 views
-1

我一直在Google上搜索,并且无法锁定我正在尝试执行的操作。我阅读一个'二进制文件'的东西,但在这些链接中,人们提到了标题和格式,这看起来与我之后的情况相反。阅读文件的二进制文件

最终目标:对图片中的任何文件进行加密(假定图片足够大,可用于该文件)。起始目标:将任何扩展名的任何文件读入C++向量(或其他任何 - 如果某些东西比较高级,我会为您提供建议),然后使用不同的名称将同一文件重写到硬盘上。之后,我想检查文件是否仍然有效/是否具有相同的大小/等等。

所以我试图确保我有能力将文件吸入'A',并且能够在我拼接'A'的内容之前写入文件'A',然后粘贴它成图像。

谢谢您的参考。

+0

[读取和写入二进制文件]可能的副本(http://stackoverflow.com/questions/5420317/reading-and-writing-binary-file) – FailedDev

+1

为什么哦为什么你会读取二进制数据到C++向量?分配的内存块(或更好的内存映射)绰绰有余。 –

+0

如果您将文件读入缓冲区,然后将整个缓冲区写入新文件,那么大小和内容将会相同,否则您做错了什么=) – Cyclonecode

回答

0

有更好的(和更有效的)方法来复制文件。但是回答您的具体问题:

#include <fstream> 
#include <vector> 

int main() 
{ 
    std::ifstream in("input_file", std::ios::binary); 

    auto beg = in.tellg(); 
    in.seekg(0, std::ios::end); 
    auto end = in.tellg(); 

    auto sz = end - beg; 

    std::vector<char> outbuf; 

    if(0 != sz) 
    { 
     in.seekg(0, std::ios::beg); 
     outbuf.resize(sz); 

     in.read(&outbuf[0], outbuf.size()); 

     std::ofstream out("output_file", std::ios::binary); 
     out.write(&outbuf[0], outbuf.size()); 
    } 
} 
+0

这就是我正在寻找,但它似乎并没有工作。我用test.rar(大小333字节 - 一个rar'ed txt文件)。 output_file是133kb,并且未能使用winrar进行提取(在重命名为test.rar后) – user904963

+0

只是对我的一个简单测试,它按预期工作。使用多字节(而不是unicode)编码。抱歉它不适合你。 – Chad

+0

http://pastebin.com/YtG52jP3这是我的代码。我在控制台“test.rar”中输入并准备好一个test.rar文件。我是否改变了代码中的某些内容以使其不起作用?我的编译器不喜欢自动乞讨等。 – user904963

2

你问一个名为隐写术的东西引用。我已经写了一篇研究论文。在这里完整发布它,Wikipedia有一个关于它的网页。