Ситуация следующая:
ОС W2k. В определенном каталоге лежит какой-то файл.
FindFirstFile или FindNextFile его находит и возвраает правильное время создания.
Теперь этот файл удаляем и быстренько в этот же каталог переписываем совершенно
другой файл с тем-же именем.
FindFirstFile его находит и возвращает время создания старого файла!
Если между удалением и переписыванием выдержать паузу 2-3 мин. все работает нормально.
Если я правильно понимаю, проблема с кэшем. Можно ли с этим бороться?
Здравствуйте, Morra, Вы писали:
M>Ситуация следующая: M>ОС W2k. В определенном каталоге лежит какой-то файл. M>FindFirstFile или FindNextFile его находит и возвраает правильное время создания. M>Теперь этот файл удаляем и быстренько в этот же каталог переписываем совершенно M>другой файл с тем-же именем. M>FindFirstFile его находит и возвращает время создания старого файла! M>Если между удалением и переписыванием выдержать паузу 2-3 мин. все работает нормально. M>Если я правильно понимаю, проблема с кэшем. Можно ли с этим бороться?
[msdn]In rare cases, file attribute information on NTFS file systems may not be current at the time you call this function. To obtain the current NTFS file attributes, call GetFileInformationByHandle.
Здравствуйте, Morra, Вы писали:
M>Ситуация следующая: M>ОС W2k. В определенном каталоге лежит какой-то файл. M>FindFirstFile или FindNextFile его находит и возвраает правильное время создания. M>Теперь этот файл удаляем и быстренько в этот же каталог переписываем совершенно M>другой файл с тем-же именем. M>FindFirstFile его находит и возвращает время создания старого файла! M>Если между удалением и переписыванием выдержать паузу 2-3 мин. все работает нормально. M>Если я правильно понимаю, проблема с кэшем. Можно ли с этим бороться?
SM>[msdn]In rare cases, file attribute information on NTFS file systems may not be current at the time you call this function. To obtain the current NTFS file attributes, call GetFileInformationByHandle SM>[/msdn]
Эту функцию я и сам находил, но она требует Handle файла, а мне очень не хочется файлы открывать и закрывать,
уж больно их много и некоторые могут быть залочены.
SM>FindClose между этим делается?
Конечно делается.
Здравствуйте, bkv_28, Вы писали:
_>Здравствуйте, Morra, Вы писали:
M>>Ситуация следующая: M>>ОС W2k. В определенном каталоге лежит какой-то файл. M>>FindFirstFile или FindNextFile его находит и возвраает правильное время создания. M>>Теперь этот файл удаляем и быстренько в этот же каталог переписываем совершенно M>>другой файл с тем-же именем. M>>FindFirstFile его находит и возвращает время создания старого файла! M>>Если между удалением и переписыванием выдержать паузу 2-3 мин. все работает нормально. M>>Если я правильно понимаю, проблема с кэшем. Можно ли с этим бороться?
_>FlushFileBuffers , см. MSDN.
_>Best regards.
как я понял, здесь идет речь о кешировании атрибутов файла(ов), а не его содержимое (хотя содержимое тоже атрибут ).
Здравствуйте, Morra, Вы писали:
M>Здравствуйте, SergeMukhin, Вы писали:
SM>>[msdn]In rare cases, file attribute information on NTFS file systems may not be current at the time you call this function. To obtain the current NTFS file attributes, call GetFileInformationByHandle SM>>[/msdn] M>Эту функцию я и сам находил, но она требует Handle файла, а мне очень не хочется файлы открывать и закрывать, M>уж больно их много и некоторые могут быть залочены.
SM>>FindClose между этим делается? M>Конечно делается.
M>P.S. Спасибо за ответ.
как я понимаю, если прочитано оглавление, и получена информация о файле, то это куда-то уходит и все равно между получением информации и ее использовании происходит время достаточное для изменения атрибутов файла (а также для удаления). Ясно, что FindFirstFile не может "лочить" оглавление. Остается только делать это самому открывая файл и считывая информацию об атрибутах.
Поэтому надо научить программу работать с устаревшей инфой
... << RSDN@Home 1.1.0 stable >>
---
С уважением,
Сергей Мухин
Re: Можно ли бороться с кэшем?
От:
Аноним
Дата:
18.11.03 13:40
Оценка:
Здравствуйте, Morra, Вы писали:
M>Ситуация следующая:
[] M>Если я правильно понимаю, проблема с кэшем. Можно ли с этим бороться?
Кэш тут ни при чем. Все горазго хуже
Это такая фича в Win2K: если файл удаляется, а потом в течение некоторого забитого в системе времени (как раз порядка секунды) создается новый файл с тем же именем, то атрибуты, дата создания и еще что-то берутся от старого файла
Если найду ссылку на статью про это, напишу в догонку.