Russian Qt Forum

Qt => Общие вопросы => Тема начата: bez_glaz от Март 09, 2012, 10:36



Название: Работа с файлом
Отправлено: bez_glaz от Март 09, 2012, 10:36
Добрый день.
Стоит задача -  в текстовом файле зная номер строки удалить строчку.
Читая форумы, увидел только вариант создавать строку, записывать в неё все данные до нужной строки + все данные после нужной строки, очищать файл и вносить в него вновь созданную строку.
Вариант не подходит, файл может содержать больше информации, нежели вместит QString.


Название: Re: Работа с файлом
Отправлено: BRE от Март 09, 2012, 10:44
А тут вариантов не много.
Например, создавай новый файл и построчно копируй туда строки из старого файла. Не нужную строку пропускай.


Название: Re: Работа с файлом
Отправлено: bez_glaz от Март 09, 2012, 11:03
Наткнулся на метод с потоком. Единственное решение по "затиранию" в файле.
Код:
QTextStream out(&shadow_file);
Только возникает проблема, что просто затереть пробелами строчку нельзя, нужно именно стереть ее.
Может рыть в сторону потока ?


Название: Re: Работа с файлом
Отправлено: mutineer от Март 09, 2012, 11:08
Наткнулся на метод с потоком. Единственное решение по "затиранию" в файле.
Код:
QTextStream out(&shadow_file);
Только возникает проблема, что просто затереть пробелами строчку нельзя, нужно именно стереть ее.
Может рыть в сторону потока ?

Просто удалить строку из файла нельзя, можно только перезаписью всего файла или его части начиная от нужной строки


Название: Re: Работа с файлом
Отправлено: BRE от Март 09, 2012, 11:08
Может рыть в сторону потока ?
Поток это средство для работы с текстовыми файлами, с ним может быть удобней.

Для чего затирать строку пробелами?

Цикл пока в исходном файле есть строки
  Читаешь строку исходного файла
  Если номер этой строки != номеру удаляемой строки
    Записываем строку в результирующий файл
Конец цикла


Название: Re: Работа с файлом
Отправлено: alexandros от Март 09, 2012, 16:34
А тут вариантов не много.
Например, создавай новый файл и построчно копируй туда строки из старого файла. Не нужную строку пропускай.


Лично я бы так и сделал