![]() |
|
|
![]()
|
|
| lv151 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 916 Регистрация: 11.2.2008 Репутация: нет Всего: 2 |
С помощью CStdioFile считываю файл построчно, при определённом условии хотелось бы удалять считанную строку из файла.
Я так понял, что с помощью CStdioFile этого сделать нельзя. Смотрю в сторону MapViewOfFile. Или это можно сделать грамотнее? |
|||
|
||||
| Albor |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 589 Регистрация: 28.2.2009 Репутация: 7 Всего: 9 |
Наверное нужно удалять старый файл и менять его на новый изменённый.
|
|||
|
||||
| lv151 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 916 Регистрация: 11.2.2008 Репутация: нет Всего: 2 |
проблема в том, что файл может быть очень большим.
|
|||
|
||||
| Albor |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 589 Регистрация: 28.2.2009 Репутация: 7 Всего: 9 |
Как мне видится, без перезаписи не обойтись, так как файл - это последовательность байт и "вырвать" что-то из середины нельзя (что останется на этом месте и как файл сам "укоротится"?). Новый файл можно формировать во время чтения исходного, только дописывать в него то что нужно. В конце - удалить старый и переименовать новый.
|
|||
|
||||
| lv151 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 916 Регистрация: 11.2.2008 Репутация: нет Всего: 2 |
Новый файл может быть очень большим. Проблема в том что я заранее проверяю, хватает ли места на диске для старого файла. Новый может не поместиться.
Это сообщение отредактировал(а) lv151 - 2.7.2009, 15:09 |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Удаление куска из середины означает перемещение хвоста вперед. При большом файле это может заметно тормозить. Плюс открывать файл придется на чтение-запись, и вообще доавольно много геморроя при кодировании. Отображение в память геморрой с позициями, конечно, снимет, но тормоза на перемещение больших кусков данных никуда не денутся.
Я думаю, что основная засада в том, что ты вообще рассматриваешь "очень большой файл" как единый массив байтов. Видимо, это неправильно. Интересно, если на диске не хватает места для "старого" файла, откуда он там берется? -------------------- ... |
|||
|
||||
| lv151 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 916 Регистрация: 11.2.2008 Репутация: нет Всего: 2 |
ok
|
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |