L>1) Как удалить содержимое текстового файла начиная с текущей позиции и до некоторой следующей позиции.
Только копированием контента из конца в начало файла (или созданием временного файла как частный случай.
L>2) М.б. существуют типовые решения этой задачи?
Вести лог в два файла. Первый и второй поочередно менять местами при заполнении.
Задача:
Есть лог файл (хендл на него открыт данным потоком эксклюзивно), периодически в лог сыпется информация, когда лог файл разрастается до заданного размера , первая половина лог файла стирается.
Вопросы:
1) Как удалить содержимое текстового файла начиная с текущей позиции и до некоторой следующей позиции.
2) М.б. существуют типовые решения этой задачи?
Здравствуйте, loknalori, Вы писали:
L>Задача: L>Есть лог файл (хендл на него открыт данным потоком эксклюзивно), периодически в лог сыпется информация, когда лог файл разрастается до заданного размера , первая половина лог файла стирается.
L>Вопросы: L>1) Как удалить содержимое текстового файла начиная с текущей позиции и до некоторой следующей позиции. L>2) М.б. существуют типовые решения этой задачи?
1) никак
2) ? можно посоветовать копировать вторую половину в первую, или через temp файл и т.д.
Здравствуйте, loknalori, Вы писали:
L>Задача: L>Есть лог файл (хендл на него открыт данным потоком эксклюзивно), периодически в лог сыпется информация, когда лог файл разрастается до заданного размера , первая половина лог файла стирается.
L>Вопросы: L>1) Как удалить содержимое текстового файла начиная с текущей позиции и до некоторой следующей позиции. L>2) М.б. существуют типовые решения этой задачи?
Это несложно, если разбираешься в проецируемых в память файлах. Они позволяют работать с файлами так, как будто те полностью загружены в память. Поэтому чтобы удалить какую то часть файла нужно просто сдвинуть содержимое файла за границей удаления на размер этой границы к началу файла и вычислить где теперь находится конец файла.
Почитай соответствующую литературу и сам легко найдешь решение.
MW>Это несложно, если разбираешься в проецируемых в память файлах. Они позволяют работать с файлами так, как будто те полностью загружены в память. Поэтому чтобы удалить какую то часть файла нужно просто сдвинуть содержимое файла за границей удаления на размер этой границы к началу файла и вычислить где теперь находится конец файла.
Ну я в общем так и сделал, спроецировал файл, и в первую половину скопировал вторую, потом на границе частей выставил флаг конца файла и закрыл его. На счет смещения за границу — не вполне понял. Можно подробнее?
Здравствуйте, loknalori, Вы писали:
MW>>Это несложно, если разбираешься в проецируемых в память файлах. Они позволяют работать с файлами так, как будто те полностью загружены в память. Поэтому чтобы удалить какую то часть файла нужно просто сдвинуть содержимое файла за границей удаления на размер этой границы к началу файла и вычислить где теперь находится конец файла. L>Ну я в общем так и сделал, спроецировал файл, и в первую половину скопировал вторую, потом на границе частей выставил флаг конца файла и закрыл его. На счет смещения за границу — не вполне понял. Можно подробнее?
Ну я просто общий подход описал. Удаляемая часть в общем случае как бы делит файл на 3 части: 1 — неизменная (не изменится после удаления куска файла), 2 — удаляемая (будет затерта), 3 — перемещаемая — та, которой будет затерта часть 2. Берем часть 3 и как бы перемещаем ее (как одно целое) на начало части 2 (процедура перемещения не должна вызвать проблем). И пересчитываем размер файла. Вроде не сложно.
MW>... и как бы перемещаем ее (как одно целое) на начало части 2
Ну то что подход такой — это сомнений не вызывает , я то просто подумал что вы этот способ какой нибудь атомарной операцией winapi реализуете...