Можно ли бороться с кэшем?
От: Morra  
Дата: 17.11.03 15:45
Оценка:
Ситуация следующая:
ОС W2k. В определенном каталоге лежит какой-то файл.
FindFirstFile или FindNextFile его находит и возвраает правильное время создания.
Теперь этот файл удаляем и быстренько в этот же каталог переписываем совершенно
другой файл с тем-же именем.
FindFirstFile его находит и возвращает время создания старого файла!
Если между удалением и переписыванием выдержать паузу 2-3 мин. все работает нормально.
Если я правильно понимаю, проблема с кэшем. Можно ли с этим бороться?
Re: Можно ли бороться с кэшем?
От: SergeMukhin Россия  
Дата: 17.11.03 15:56
Оценка:
Здравствуйте, 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.

[/msdn]

FindClose между этим делается?
... << RSDN@Home 1.1.0 stable >>
---
С уважением,
Сергей Мухин
Re: Можно ли бороться с кэшем?
От: bkv_28  
Дата: 17.11.03 16:06
Оценка:
Здравствуйте, Morra, Вы писали:

M>Ситуация следующая:

M>ОС W2k. В определенном каталоге лежит какой-то файл.
M>FindFirstFile или FindNextFile его находит и возвраает правильное время создания.
M>Теперь этот файл удаляем и быстренько в этот же каталог переписываем совершенно
M>другой файл с тем-же именем.
M>FindFirstFile его находит и возвращает время создания старого файла!
M>Если между удалением и переписыванием выдержать паузу 2-3 мин. все работает нормально.
M>Если я правильно понимаю, проблема с кэшем. Можно ли с этим бороться?

FlushFileBuffers , см. MSDN.

Best regards.
Re[2]: Можно ли бороться с кэшем?
От: Morra  
Дата: 17.11.03 16:23
Оценка:
Здравствуйте, 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]
Эту функцию я и сам находил, но она требует Handle файла, а мне очень не хочется файлы открывать и закрывать,
уж больно их много и некоторые могут быть залочены.

SM>FindClose между этим делается?

Конечно делается.

P.S. Спасибо за ответ.
Re[2]: Можно ли бороться с кэшем?
От: SergeMukhin Россия  
Дата: 17.11.03 16:26
Оценка:
Здравствуйте, bkv_28, Вы писали:

_>Здравствуйте, Morra, Вы писали:


M>>Ситуация следующая:

M>>ОС W2k. В определенном каталоге лежит какой-то файл.
M>>FindFirstFile или FindNextFile его находит и возвраает правильное время создания.
M>>Теперь этот файл удаляем и быстренько в этот же каталог переписываем совершенно
M>>другой файл с тем-же именем.
M>>FindFirstFile его находит и возвращает время создания старого файла!
M>>Если между удалением и переписыванием выдержать паузу 2-3 мин. все работает нормально.
M>>Если я правильно понимаю, проблема с кэшем. Можно ли с этим бороться?

_>FlushFileBuffers , см. MSDN.


_>Best regards.


как я понял, здесь идет речь о кешировании атрибутов файла(ов), а не его содержимое (хотя содержимое тоже атрибут ).
... << RSDN@Home 1.1.0 stable >>
---
С уважением,
Сергей Мухин
Re[3]: Можно ли бороться с кэшем?
От: SergeMukhin Россия  
Дата: 17.11.03 16:46
Оценка:
Здравствуйте, 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: если файл удаляется, а потом в течение некоторого забитого в системе времени (как раз порядка секунды) создается новый файл с тем же именем, то атрибуты, дата создания и еще что-то берутся от старого файла

Если найду ссылку на статью про это, напишу в догонку.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.