Поиск:

Ответ в темуСоздание новой темы Создание опроса
> CStdioFile, удаление считанной строки. 
:(
    Опции темы
lv151
Дата 2.7.2009, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 916
Регистрация: 11.2.2008

Репутация: нет
Всего: 2



С помощью CStdioFile считываю файл построчно, при определённом условии хотелось бы удалять считанную строку из файла.
Я так понял, что с помощью CStdioFile этого сделать нельзя. Смотрю в сторону MapViewOfFile. Или это можно сделать грамотнее?
PM MAIL   Вверх
Albor
Дата 2.7.2009, 13:44 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 589
Регистрация: 28.2.2009

Репутация: 7
Всего: 9



Наверное нужно удалять старый файл и менять его на новый изменённый.
PM MAIL ICQ   Вверх
lv151
Дата 2.7.2009, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 916
Регистрация: 11.2.2008

Репутация: нет
Всего: 2



проблема в том, что файл может быть очень большим.
PM MAIL   Вверх
Albor
Дата 2.7.2009, 14:49 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 589
Регистрация: 28.2.2009

Репутация: 7
Всего: 9



Как мне видится, без перезаписи не обойтись, так как файл - это последовательность байт и "вырвать" что-то из середины нельзя (что останется на этом месте и как файл сам "укоротится"?).  Новый файл можно формировать во время чтения исходного, только дописывать в него то что нужно. В конце - удалить старый и переименовать новый.
PM MAIL ICQ   Вверх
lv151
Дата 2.7.2009, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 916
Регистрация: 11.2.2008

Репутация: нет
Всего: 2



Новый файл может быть очень большим. Проблема в том что я заранее проверяю, хватает ли места на диске для старого файла. Новый может не поместиться.

Это сообщение отредактировал(а) lv151 - 2.7.2009, 15:09
PM MAIL   Вверх
Earnest
Дата 2.7.2009, 20:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Удаление куска из середины означает перемещение хвоста вперед. При большом файле это может заметно тормозить. Плюс открывать файл придется на чтение-запись, и вообще доавольно много геморроя при кодировании. Отображение в память геморрой с позициями, конечно, снимет, но тормоза на перемещение больших кусков данных никуда не денутся.
Я думаю, что основная засада в том, что ты вообще рассматриваешь "очень большой файл" как единый массив байтов. Видимо, это неправильно.
Интересно, если на диске не хватает места для "старого" файла, откуда он там берется?


--------------------
...
PM   Вверх
lv151
Дата 6.7.2009, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 916
Регистрация: 11.2.2008

Репутация: нет
Всего: 2



ok
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0871 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.