Двоичный файл просто читать, потом писать не работает - PullRequest
1 голос
/ 01 декабря 2011

Ниже приведен код. На данный момент все, что я хочу сделать, это прочитать в двоичном файле, а затем записать этот же двоичный файл, чтобы убедиться, что я правильно прочитал и записал [т.е. без изменения файла].

Я использовал test.rar (размер 333 байта - rar'ed txt файл). Выходной файл был 133 КБ и не может быть извлечен с помощью winrar (после переименования в test.rar). Поэтому я, должно быть, делаю что-то не так и не могу найти ошибку.

Кроме того, когда я запускаю прокомментированный код, он выдает «Эта программа не может работать в DOS» и начинает несколько раз издавать звуковые сигналы и повторяться, когда он проходит через мой вектор. Это как если бы 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...