Про файлы и байты
От: Аноним  
Дата: 12.10.04 14:09
Оценка:
Есть вектор(std::vector<BYTE>) байт, как его быстро записать в файл
Re: Про файлы и байты
От: korzhik Россия  
Дата: 12.10.04 14:30
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Есть вектор(std::vector<BYTE>) байт, как его быстро записать в файл


вот так в бинарном виде:
  std::vector<BYTE> arr;
  std::ofstream f("qqq.txt");

  if (f)
  {
    f.write( (const char*)&arr[0], arr.size()*sizeof(BYTE));
  }


вот так в текстовом:
  std::vector<BYTE> arr;
  
  std::ofstream f("qqq.txt");

  if (f)
  {
    std::copy(arr.begin(), arr.end(), std::ostream_iterator<unsigned>(f, " "));
  }
Re: Про файлы и байты
От: Bell Россия  
Дата: 12.10.04 14:33
Оценка: 1 (1)
Здравствуйте, Аноним, Вы писали:

А>Есть вектор(std::vector<BYTE>) байт, как его быстро записать в файл



std::vector<char> arr;
arr.push_back('0');
arr.push_back('1');
arr.push_back('2');

std::ofstream fout("c:\\test\\vec.dat", std::ios::out | std::ios::binary);
size_t sz = arr.size();
fout.write(reinterpret_cast<char*>(&sz), sizeof(size_t));
fout.write(&arr[0], sz*sizeof(arr[0]));
fout.close();

arr.clear();
sz = 0;

std::ifstream fin("c:\\test\\vec.dat", std::ios::in | std::ios::binary);
fin.read(reinterpret_cast<char*>(&sz), sizeof(size_t));
arr.resize(sz);
fin.read(&arr[0], sz*sizeof(arr[0]));
Любите книгу — источник знаний (с) М.Горький
Re[2]: Про файлы и байты
От: MaximE Великобритания  
Дата: 12.10.04 16:27
Оценка: +1
korzhik wrote:

> Здравствуйте, Аноним, Вы писали:

>
> А>Есть вектор(std::vector<BYTE>) байт, как его быстро записать в файл
>
> вот так в бинарном виде:
>
>   std::vector<BYTE> arr;
>   std::ofstream f("qqq.txt");
>
>   if (f)
>   {
>     f.write( (const char*)&arr[0], arr.size()*sizeof(BYTE));
>   }
>


Это не в бинарном виде — на мелкософте write() тебе назаменяет '\n' на "\r\n", если не открыл файл с флагом binary.

--
Maxim Yegorushkin
Posted via RSDN NNTP Server 1.9 gamma
Re: Про файлы и байты
От: MaximE Великобритания  
Дата: 12.10.04 16:52
Оценка:
wrote:

> Есть вектор(std::vector<BYTE>) байт, как его быстро записать в файл


Реально самый быстрый способ записать что-либо в файл — использовать неблокирующий или асинхронный вывод. Это не так просто как вызов write(), но действительно быстро.

Ищи в PSDK "Synchronous and Asynchronous I/O" для MS; nonblocking и async i/o — для linux .

--
Maxim Yegorushkin
Posted via RSDN NNTP Server 1.9 gamma
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.