Как я могу добавить текст перед каждый раз, когда я пишу в файл? - PullRequest
0 голосов
/ 13 февраля 2019

Эй, я имею дело с обработкой файлов в c ++ ... Я новичок в обработке файлов .... Я хочу добавлять содержимое перед файлом каждый раз, когда я пишу в файл ........

Я открыл файл, используя ..... fstream fi ("user.txt", ios :: app);

, но это всегда добавляет содержимое в конец файла .....

Я написал код на C ++, используя .....

Fstream fi ("user.txt", ios :: app);fi << "Джон - отличный мальчик" <<pre>Fstream fi("user.txt",ios::app); fi<<"john is a great boy"<<endl;

фактический результат: мой контент всегда добавляется в конец файла ...
Ожидается: он всегда должен добавлять контент перед файлом ....

Ответы [ 3 ]

0 голосов
/ 13 февраля 2019

Первый вопрос будет таким: почему вы вообще хотите это сделать?

Затем с обработкой файлов это будет сложно, потому что это не так, как файлы работают на уровне ОС - при добавлении обычноподдерживается изначально, это не относится к предваряющему (и поэтому в C ++ STL также нет поддержки).Поэтому вам нужно будет записать новые строки во временный файл, а затем все время добавлять предыдущее содержимое.В Windows, Linux, BSD и дериватах не обойтись.

Если вы действительно настаиваете на этом, вы можете написать свой собственный класс потоков на основе стандартных файловых потоков, скрывающих всю эту работу.Альтернативный вариант может прочитать выходной файл только один раз, сохранить все строки в памяти, правильно обработать новые строки и распечатать строки обратно в файл только один раз при закрытии объекта потока.Недостаток: в случае сбоя приложения может потеряться довольно много строк.Вы можете либо использовать std::deque и добавлять новые строки или читать строки в обратном порядке в std::vector, добавлять новые строки и затем печатать в файл, используя обратные итераторы.

Вероятно, однако, вылучше просто добавляя файлы.Затем вы можете написать отдельное приложение, инвертирующее порядок строк - преимущество: вы будете выполнять инверсию только один раз, чтение со спины может быть выполнено довольно эффективно, и при записи нового выходного файла вытолько добавлю снова.В качестве альтернативы вы можете написать свое собственное приложение для просмотра файлов, представляющее строки в инвертированном порядке (снова чтение со спины, если размер слишком велик, или просто сохранение всех строк в памяти сразу).

0 голосов
/ 13 февраля 2019

Если ваш файл не очень большой, вы можете сначала скопировать содержимое файла в stringstream ss, добавить новый контент перед ss и записать его обратно в файл.

0 голосов
/ 13 февраля 2019

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

...