Чтение и запись байтов из файла (c ++) - PullRequest
6 голосов
/ 18 февраля 2010

Я думаю, что мне, вероятно, придется использовать объект fstream, но я не уверен, как. По сути, я хочу прочитать в файле в байтовый буфер, изменить его, а затем переписать эти байты в файл. Так что мне просто нужно знать, как сделать байт ввода / вывода.

Ответы [ 4 ]

7 голосов
/ 18 февраля 2010
#include <fstream>

ifstream fileBuffer("input file path", ios::in|ios::binary);
ofstream outputBuffer("output file path", ios::out|ios::binary);
char input[1024];
char output[1024];

if (fileBuffer.is_open())
{
    fileBuffer.seekg(0, ios::beg);
    fileBuffer.getline(input, 1024);
}

// Modify output here.

outputBuffer.write(output, sizeof(output));

outputBuffer.close();
fileBuffer.close();

По памяти я думаю, что так оно и есть.

1 голос
/ 19 февраля 2010

Если вы имеете дело с небольшим размером файла, я рекомендую, чтобы чтение всего файла было проще. Затем поработайте с буфером и снова запишите весь блок. Они показывают, как читать блок - при условии, что вы заполняете открытый файл ввода / вывода сверху. Ответ

  // open the file stream
  .....
  // use seek to find the length, the you can create a buffer of that size
  input.seekg (0, ios::end);   
  int length = input.tellg();  
  input.seekg (0, ios::beg);
  buffer = new char [length];
  input.read (buffer,length);

  // do something with the buffer here
  ............
  // write it back out, assuming you now have allocated a new buffer
  output.write(newBuffer, sizeof(newBuffer));
  delete buffer;
  delete newBuffer;
  // close the file
  ..........
0 голосов
/ 03 ноября 2018
#include <iostream>
#include <fstream>

const static int BUF_SIZE = 4096;

using std::ios_base;

int main(int argc, char** argv) {

   std::ifstream in(argv[1],
      ios_base::in | ios_base::binary);  // Use binary mode so we can
   std::ofstream out(argv[2],            // handle all kinds of file
      ios_base::out | ios_base::binary); // content.

   // Make sure the streams opened okay...

   char buf[BUF_SIZE];

   do {
      in.read(&buf[0], BUF_SIZE);      // Read at most n bytes into
      out.write(&buf[0], in.gcount()); // buf, then write the buf to
   } while (in.gcount() > 0);          // the output.

   // Check streams for problems...

   in.close();
   out.close();
}
0 голосов
/ 18 февраля 2010

При выполнении файлового ввода-вывода вам придется читать файл в цикле, проверяя конец файла и условия ошибки.Вы можете использовать приведенный выше код, как этот

while (fileBufferHere.good()) {  
    filebufferHere.getline(m_content, 1024)  
    /* Do your work */  
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...