Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Удаление данных из файла
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Ввод/Вывод, Сеть. Межпроцессное взаимодействие
QMainWindow
Привет!
Как удалить данные из файла? Файл текстовый, нужно удалить несколько строк, причем не заменить на пустые строки, а именно удалить. Как можно сделать?
wiz29
только пересохранением файла с таким же именем.
maint
Цитата(QMainWindow @ 10.8.2011, 22:53) *
Привет!
Как удалить данные из файла? Файл текстовый, нужно удалить несколько строк, причем не заменить на пустые строки, а именно удалить. Как можно сделать?

копированием во времянку, пропуском строк и переименованием времянки в текущее имя
QMainWindow
Хм, и так все программы работают?
maint
Цитата(QMainWindow @ 10.8.2011, 23:21) *
Хм, и так все программы работают?

само собой. Разве что небольшие файлы просто переписывают заново с начала
QMainWindow
А как с большими поступают?
maint
Цитата(QMainWindow @ 11.8.2011, 1:13) *
А как с большими поступают?

уже говорилось. Копируется сколько надо во времянку и т.п. А для структурированных данных уже другой подход
QMainWindow
Понял. Почему же не придумали непосредственное удаление?

PS можно ли как-нибудь QTextStream указать номер строки, с которой необходимо считывать? Или до нужной строки надо доходить циклом вроде
for(i=0;i<index_of_my_line;i++) in.readLine();
?
maint
Цитата(QMainWindow @ 11.8.2011, 16:34) *
Понял. Почему же не придумали непосредственное удаление?

PS можно ли как-нибудь QTextStream указать номер строки, с которой необходимо считывать? Или до нужной строки надо доходить циклом вроде
for(i=0;i<index_of_my_line;i++) in.readLine();
?

после изучения мат.части (последовательный доступ), первый вопрос отпадёт. Номер строки указать нельзя, если строки разной длины. Если одинаковой, что вряд ли, можно вычислить смещение.
QMainWindow
Значит только циклом проходить?
silver47
Цитата(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
Цитата(QMainWindow @ 11.8.2011, 17:15) *
Значит только циклом проходить?

только циклом. Для больших объемов данных используются базы и др. структурированные данные. Редакторы через времянки работают и буфера в памяти
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.