Удаление последней строки из файла
Читать блоками с конца. Найти второй от конца ‘\n’ (это конец предпоследней строки). Вызвать ftruncate для нужной позиции.
4 июл 2020 в 7:37
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
ЧИТАТЬ первую запись в буфер ЦИКЛ (Цикл пока не конец файла) ЧИТАТЬ следующую запись ЕСЛИ НЕ конец файла ПИСАТЬ буфер КОПИРОВАТЬ результат чтения в буфер ПРОДОЛЖИТЬ цикл ИНАЧЕ ЗАВЕРШИТЬ цикл
Смысл простой: после каждой операции чтения пишем НЕ текущий результат чтения, а предшествующий буфер. Если достигнут конец файла, последняя запись буфера не выполняется. Фактически происходит удаление последней записи.
Отслеживать
ответ дан 6 июл 2020 в 3:06
13.4k 1 1 золотой знак 13 13 серебряных знаков 29 29 бронзовых знаков
-
Важное на Мете
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.1.8.3130
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Как удалить из файла последнюю строку в qt ?
Хочу удалить из файла последнюю строку, используя qfile. Как это сделать по простому, не переписывая его.
user2132 ★
09.10.19 09:26:01 MSK
Почему вы упорно отказываетесь читать документацию? метод resize
Silerus ★★★★
( 09.10.19 09:34:03 MSK )
Ответ на: комментарий от Silerus 09.10.19 09:34:03 MSK

И как он определит размер, который надо передавать в resize? Читать файл всё равно придётся.
ТС: совсем по-простому не получится, файл для ОС — это набор байт, а строки это уже абстракция уровнем выше.
hobbit ★★★★★
( 09.10.19 11:11:32 MSK )
Ответ на: комментарий от hobbit 09.10.19 11:11:32 MSK

Как это сделать по простому, не переписывая его.
А где ТС сказал что читать нельзя? Ресайз самое то, нашел позицию и вперед.
LinuxDebian ★★★★
( 09.10.19 11:22:07 MSK )
Последнее исправление: LinuxDebian 09.10.19 11:22:25 MSK (всего исправлений: 1)
Ответ на: комментарий от hobbit 09.10.19 11:11:32 MSK
А никто и не спорит, читать придется и считать размер придется. Но тс хочет именно подрезать без перезаписи — кто ж ему мешает. Я бы не заморачивался и сделал через запись во временный файл с последующим переименованием.
Silerus ★★★★
( 09.10.19 11:22:57 MSK )

Как это сделать по простому, не переписывая его.
Никак, у тебя всё равно будет операция записи. А так — ищи перенос строки с конца файла, да удаляй всё, что до него
XMs ★★★★★
( 09.10.19 11:23:43 MSK )

#include int ftruncate(int fildes, off_t length); int truncate(const char *path, off_t length);
Как удалить последнюю строку в файле?

Если файлы ооочень большие, то чтением всего файла построчно в память и записью в новый файл не справиться!
Используйте модуль mmap. Переместитесь по seek на 5-10 максимально возможных строчек от размера файла, просканируйте строчки, возьмите размер последней строки и обрежте файл через resize.
Таким методом можно работать с любыми размерами файлов и очень быстро делать инплейс редактирование!
https://docs.python.org/3.0/library/mmap.html
В дополнение, если искомая строка для удаления находится не в самом конце файла, то кроме resize нужно еще и использовать move.
Ну и немного примеров здесь https://pymotw.com/2/mmap/
Ответ написан более трёх лет назад
Если файлы ооочень большие, то чтением всего файла построчно в память и записью в новый файл не справиться!
Используйте модуль mmap.
Если файлы действительно ооочень большие, то для mmap может не хватить адресного пространства. Но если у файла есть seek, то можно читать файл с конца в буфер фиксированного размера и искать конец строки в нём, а потом обрезать файл по найденному смещению.

jcmvbkbc, в исходники не смотрел, но наверняка там используют seek64 и остальные вызовы xxx64. Как минимум надеюсь. Ну или ваш способ тоже хорош, если resize64 внутри, а так — те же грабли 🙂 тогда только копированием.
Как удалить последнюю строку в файле с
Регистрация: 20.12.2017
Сообщений: 3
как удалить строку из файла
помогите не знаю как удалить строку из файла(массив структур)
case 3:
cout cin>>o;//26
aa a[o];
for(int i=0;i
getline(file2,a[i].s2);
getline(file2,a[i].s3);
if(j==a[i].s1)
Регистрация: 20.04.2008
Сообщений: 5,512
1. прочитать и, записать в другой файл ВСЕ КРОМЕ. (того что не надо).
2. прочитать, запомнить все в массив, записать ВСЕ КРОМЕ. обратно(в файл).
3. прочитать, запомнить ВСЕ КРОМЕ. в массив, записать все обратно.
программа — запись алгоритма на языке понятном транслятору
| Похожие темы | ||||
| Тема | Автор | Раздел | Ответов | Последнее сообщение |
| Двунаправленный линейный список строк. Вставить строку, удалить строку и заменить строку | tarasman11 | Паскаль, Turbo Pascal, PascalABC.NET | 4 | 05.07.2012 20:27 |
| Удалить строку из типизированого файла Delphi | prod87 | Помощь студентам | 4 | 03.07.2010 09:09 |
| Удалить из текстового файла первую строку. | annosinceva | Общие вопросы C/C++ | 1 | 31.05.2010 14:19 |
| Как программно удалить одну строку из текстового файла(txt)? | lexus_samara | Общие вопросы Delphi | 6 | 24.04.2010 22:57 |
| Удалить последнюю строку из файла | Flame_of_Death | Помощь студентам | 6 | 21.07.2009 13:48 |