Есть файл input.txt с таким содержимым:
1 2 3 4 5 6
7 8 9 10 11 12
13 14 15 16 17 18
19 20 21 22 23 24
25 26 27 28 29 30
Записала содержимое в вектор и хочу записать в бинарный файл data.dat только поэлементно с индексом строки. Файл должен иметь структуру: индекс (4 байта) + 6 значений из вектора по 2 байта.
**01 00 00 00** 01 00 02 00 03 00 04 00 05 00 06 00 **02 00 00 00** 07 00 08 00 и т.д.
Вот мой код, но пишет неправильно
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <vector>
#include <iterator>
#include <algorithm>
using namespace std;
int main()
{
std::fstream input("input.txt");
std::vector<short> vec; // значения из файла
std::copy(std::istream_iterator<int>(input), std::istream_iterator<int>(), std::back_inserter(vec));
std::copy(vec.begin(), vec.end(), std::ostream_iterator<int>(std::cout, " "));
ofstream fout("data.dat", std::ios::out | ios::binary);
int countstring = 5;
int index = 0;
int row = 6;
for (int i = 0; i <= countstring; i++) {
index = i + 1;
fout.write((char *)&index, sizeof index);
for (size_t j = 0; j < row; ++j)
{
fout.write((char*)&vec[0], vec.size() * sizeof(vec));
}
}
fout.close();
return 0;
Подскажите решение, пожалуйста!
Вам нужно именно с вектором? У меня вышло как-то вот так, без вектора (файл в результате занимает 80 байт, вроде верно, но читать не пробовал)
#include <iostream>
#include <fstream>
#include <vector>
#include <iterator>
#include <string>
#include <sstream>
int main(int argc, char* argv[])
{
//Поток чтения
std::fstream input("input.txt");
//Поток вывода (бинарный)
std::ofstream output("data.dat", std::ios::out | std::ios::binary);
//Строчка
std::string str;
//Номер стрчоки
int stringNumber = 0;
//Считать построчно файл до конца
while (std::getline(input,str))
{
//Значение числа из строки
short val = 0;
//Строковой поток для читаемой строки
std::stringstream strStream(str);
//Запись индекса строки
output.write(reinterpret_cast<char*>(&stringNumber), sizeof(int));
//Пока есть числа в строке
while (strStream >> val) {
//Запись значения
output.write(reinterpret_cast<char*>(&val), sizeof(short));
}
//Увеличение индекса строки
stringNumber++;
}
std::cout << "Done." << std::endl;
system("pause");
return 0;
}