Re: Удалить половину файла
От: Аноним  
Дата: 03.09.07 12:26
Оценка: +1
L>1) Как удалить содержимое текстового файла начиная с текущей позиции и до некоторой следующей позиции.
Только копированием контента из конца в начало файла (или созданием временного файла как частный случай.

L>2) М.б. существуют типовые решения этой задачи?

Вести лог в два файла. Первый и второй поочередно менять местами при заполнении.
Удалить половину файла
От: loknalori Россия  
Дата: 03.09.07 09:08
Оценка:
Задача:
Есть лог файл (хендл на него открыт данным потоком эксклюзивно), периодически в лог сыпется информация, когда лог файл разрастается до заданного размера , первая половина лог файла стирается.

Вопросы:
1) Как удалить содержимое текстового файла начиная с текущей позиции и до некоторой следующей позиции.
2) М.б. существуют типовые решения этой задачи?
Re: Удалить половину файла
От: Pavel50 Россия  
Дата: 03.09.07 12:07
Оценка:
Здравствуйте, loknalori, Вы писали:

L>Задача:

L>Есть лог файл (хендл на него открыт данным потоком эксклюзивно), периодически в лог сыпется информация, когда лог файл разрастается до заданного размера , первая половина лог файла стирается.

L>Вопросы:

L>1) Как удалить содержимое текстового файла начиная с текущей позиции и до некоторой следующей позиции.
L>2) М.б. существуют типовые решения этой задачи?


1) никак
2) ? можно посоветовать копировать вторую половину в первую, или через temp файл и т.д.
Re: Удалить половину файла
От: Master-Win Россия  
Дата: 03.09.07 12:27
Оценка:
Здравствуйте, loknalori, Вы писали:

L>Задача:

L>Есть лог файл (хендл на него открыт данным потоком эксклюзивно), периодически в лог сыпется информация, когда лог файл разрастается до заданного размера , первая половина лог файла стирается.

L>Вопросы:

L>1) Как удалить содержимое текстового файла начиная с текущей позиции и до некоторой следующей позиции.
L>2) М.б. существуют типовые решения этой задачи?

Это несложно, если разбираешься в проецируемых в память файлах. Они позволяют работать с файлами так, как будто те полностью загружены в память. Поэтому чтобы удалить какую то часть файла нужно просто сдвинуть содержимое файла за границей удаления на размер этой границы к началу файла и вычислить где теперь находится конец файла.
Почитай соответствующую литературу и сам легко найдешь решение.
Re[2]: Удалить половину файла
От: loknalori Россия  
Дата: 03.09.07 12:53
Оценка:
MW>Это несложно, если разбираешься в проецируемых в память файлах. Они позволяют работать с файлами так, как будто те полностью загружены в память. Поэтому чтобы удалить какую то часть файла нужно просто сдвинуть содержимое файла за границей удаления на размер этой границы к началу файла и вычислить где теперь находится конец файла.
Ну я в общем так и сделал, спроецировал файл, и в первую половину скопировал вторую, потом на границе частей выставил флаг конца файла и закрыл его. На счет смещения за границу — не вполне понял. Можно подробнее?
Re[3]: Удалить половину файла
От: Master-Win Россия  
Дата: 03.09.07 13:05
Оценка:
Здравствуйте, loknalori, Вы писали:

MW>>Это несложно, если разбираешься в проецируемых в память файлах. Они позволяют работать с файлами так, как будто те полностью загружены в память. Поэтому чтобы удалить какую то часть файла нужно просто сдвинуть содержимое файла за границей удаления на размер этой границы к началу файла и вычислить где теперь находится конец файла.

L>Ну я в общем так и сделал, спроецировал файл, и в первую половину скопировал вторую, потом на границе частей выставил флаг конца файла и закрыл его. На счет смещения за границу — не вполне понял. Можно подробнее?

Ну я просто общий подход описал. Удаляемая часть в общем случае как бы делит файл на 3 части: 1 — неизменная (не изменится после удаления куска файла), 2 — удаляемая (будет затерта), 3 — перемещаемая — та, которой будет затерта часть 2. Берем часть 3 и как бы перемещаем ее (как одно целое) на начало части 2 (процедура перемещения не должна вызвать проблем). И пересчитываем размер файла. Вроде не сложно.
Re[4]: Удалить половину файла
От: loknalori Россия  
Дата: 03.09.07 13:22
Оценка:
MW>... и как бы перемещаем ее (как одно целое) на начало части 2
Ну то что подход такой — это сомнений не вызывает , я то просто подумал что вы этот способ какой нибудь атомарной операцией winapi реализуете...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.