Автор: QMainWindow 10.8.2011, 16:53
Привет!
Как удалить данные из файла? Файл текстовый, нужно удалить несколько строк, причем не заменить на пустые строки, а именно удалить. Как можно сделать?
Автор: wiz29 10.8.2011, 17:03
только пересохранением файла с таким же именем.
Автор: maint 10.8.2011, 17:06
Цитата(QMainWindow @ 10.8.2011, 22:53)
Привет!
Как удалить данные из файла? Файл текстовый, нужно удалить несколько строк, причем не заменить на пустые строки, а именно удалить. Как можно сделать?
копированием во времянку, пропуском строк и переименованием времянки в текущее имя
Автор: QMainWindow 10.8.2011, 17:21
Хм, и так все программы работают?
Автор: maint 10.8.2011, 17:28
Цитата(QMainWindow @ 10.8.2011, 23:21)
Хм, и так все программы работают?
само собой. Разве что небольшие файлы просто переписывают заново с начала
Автор: QMainWindow 10.8.2011, 19:13
А как с большими поступают?
Автор: maint 10.8.2011, 19:35
Цитата(QMainWindow @ 11.8.2011, 1:13)
А как с большими поступают?
уже говорилось. Копируется сколько надо во времянку и т.п. А для структурированных данных уже другой подход
Автор: QMainWindow 11.8.2011, 10:34
Понял. Почему же не придумали непосредственное удаление?
PS можно ли как-нибудь QTextStream указать номер строки, с которой необходимо считывать? Или до нужной строки надо доходить циклом вроде
for(i=0;i<index_of_my_line;i++) in.readLine();
?
Автор: maint 11.8.2011, 11:13
Цитата(QMainWindow @ 11.8.2011, 16:34)
Понял. Почему же не придумали непосредственное удаление?
PS можно ли как-нибудь QTextStream указать номер строки, с которой необходимо считывать? Или до нужной строки надо доходить циклом вроде
for(i=0;i<index_of_my_line;i++) in.readLine();
?
после изучения мат.части (последовательный доступ), первый вопрос отпадёт. Номер строки указать нельзя, если строки разной длины. Если одинаковой, что вряд ли, можно вычислить смещение.
Автор: QMainWindow 11.8.2011, 11:15
Значит только циклом проходить?
Автор: silver47 12.8.2011, 7:58
Цитата(QMainWindow @ 11.8.2011, 14:15)
Значит только циклом проходить?
Не поленитесь, прочтите любую книгу по С++ касательно работы с файлами. Все вопросы сразу же отпадут. Кратко: если знаете сколько символов нужно пропустить то можно и воспользоваться смещением. Если же нет, то только последовательное чтение.
QFile file;
...
// читаем все в QByteArray а там уже потрошим
QByteArray ba(file.readAll());
// или же построчно просматриваем файл
int i(0);
while(!file.atEnd()){
qDebug() << "String number:"<< ++i << file.readLine();
}
// если же Вы знаете с каких позиций читать, а с каких нет, то:
file.seek(qint64); // перемещаем курсор в файле на заданную позицию(будьте внимательны в UTF-8 каждый текстовый символ - 2 байта).
Автор: maint 12.8.2011, 8:11
Цитата(QMainWindow @ 11.8.2011, 17:15)
Значит только циклом проходить?
только циклом. Для больших объемов данных используются базы и др. структурированные данные. Редакторы через времянки работают и буфера в памяти