Запись в файл, в обратном порядке

Рейтинг: 1Ответов: 3Опубликовано: 12.05.2011

Есть один текстовый файл с цифрами через пробел, нужно создать второй файл и записать эти цифры в обратом порядке. Как это сделать? У меня есть идея, что можно при записи в цикле постоянно переходить в начало файла, но как перейти в начало? Используя библиотеку <fstream>.

Файл я создаю таким способом:

ifstream file1;
ofstream file2;
file1.open( "f1.txt" );
file2.open("f2.txt");
...

Ответы

▲ 4Принят

Не нужно инвертировать вывод путем манипуляций с курсором файла - перейдите на уровень выше. Вы считываете цифры в массив? Тогда выводите их в файл в обратном порядке, обращаясь к самому массиву в обратном порядке: digits[n-1], digits[n-2], ... А если у вас там одна строка и только беззнаковые числа из одной цифры, то проще будет считать строку, инвертировать ее и записать.

▲ 4
  1. Если память не ограничена, выделить с заведомо достаточным размером массив и считать весь файл в буфер, а затем выводить в файл в обратном порядке. Вместо массива можно использовать стек.
  2. Если память ограничена, выделить подходящий буфер, переместить указатель файла в конец минус размер буфера, считать в буфер, найти первый перевод строки, распарсить и вывести в файл в обратном порядке. Затем передвинуть указатель назад на два буфера.
▲ 2

В NT: спроецировать файловую секцию, сортировать данные в этой проекции и зафлушить её обратно в файл. Стопяцот обращений к ядру для записи в файл каждого символа или строки просто глупо.