二进制文件简单读取然后写入不起作用

时间:2011-11-30 22:29:49

标签: c++ file binary

以下是代码。现在,我想做的就是读取二进制文件,然后写相同的二进制文件,以确保我正确地读取和写入[即不改变文件]。

我使用了test.rar(大小为333字节 - 一个rar'ed txt文件)。输出文件为133kb,无法使用winrar进行提取(在重命名为test.rar之后)。所以我一定做错了,找不到错误。

此外,当我让评论的代码运行时,它会输出“此程序无法在dos中运行”并在迭代我的向量时重复开始发出蜂鸣声和boops。这就好像使用cout这个数据正在执行一个程序。如果你知道造成这种情况的原因,那就知道了。

#include "Dip.h"
#include <iostream>
#include <vector>
#include <fstream>

using namespace std;

#define USAGE "s\n"

int main(int argc, char **argv)
{
    if (argc < 1) 
    {
        cout << USAGE;
        return 1;
    }

    ifstream in(argv[0], ios::binary);
    fstream::streampos beg = in.tellg();
    in.seekg(0, ios::end);
    const fstream::streampos BUFFER_SIZE = in.tellg() - beg;

    vector<char> outputBuffer;

    if(BUFFER_SIZE)
    {
        in.seekg(0, ios::beg);
        outputBuffer.resize(BUFFER_SIZE);

        in.read(&outputBuffer[0], outputBuffer.size());
        in.close();
        std::ofstream out("output_file", ios::binary);
        out.write(&outputBuffer[0], outputBuffer.size());
        out.close();
    }
    else
    {
        cout << "main::file is empty" << endl;
        return 1;
    }
    //for(vector<char>::const_iterator itr = outputBuffer.begin(); itr !=outputBuffer.end(); ++itr)
        //cout << *itr;

    // success!
    return 0;
}

0 个答案:

没有答案