Войти

Показать полную графическую версию : [решено] Странное кеширование файла


Grem007
24-09-2010, 15:07
Здравствуйте.

Имеем такую проблему, есть файл Акцесса(.mdb) лежит он в папке C:\ProgramData\некое имя\файл.mdb
Файл, база которая работает с sql сервером(не суть важно)

Проблема в том, что на некоторых машинах под 7 этот файл при открытии, открывается не актуальной версии!(актуальная версия заливается при загрузке компьютера, тут все ок), и тут начинается самое интересное: если файл переименовать(изменить хоть 1 символ в названии, или переместить в другое место) то при его открытии откроется та самая актуальная версия, которая нужна. Если название файла вернуть обратно(или переместить его обратно в ту папку), магия начинается вновь - открывается старый файл.

На машинах установлен офис хп или 2003

Подскажите куда копать, уже сломали себе весь мозг всем отделом

Valeant
24-09-2010, 18:42
Странное у вас поведение.

актуальная версия заливается при загрузке компьютера, тут все ок.... но при открытии, открывается не актуальной версии

Да есть такая штука как superfetch - предварительная загрузка программ в память ПК при анализе его работы (т.е. после несколько раз перезапуска ПК формируется база \windows\prefetch\*.pf по часто используемым программам которые использует пользователь, и при последующем перезапуске после того как ПК будет загружен в фоновом режиме (с низким приоритетом) не мешая пользователю система продолжит загрузку необходимых программ которые пользователь использовал при своей работе в память "кэш", когда пользователь решит воспользоваться программой то она запустится не с винта, а из данного "кэша").
Данная работа некоем образом не сказывается на работе с файлами, которую вы описываете выше.

Например при работе с тем же продуктом например с Excel открываем локальный файл - делаем в нем изменения - записываем файл (происходит изменение его атрибутов : LastAccessTime, LastWriteTime, ChangeTime и т.д.) при работе с фалами используется функция QueryBasicInformationFile.
При рутинной работе с данным файлом с одним и тем же именем и при его чтении а потом записи все будет происходить как и положено, т.е. данные в файле будут содержать последние изменения и естественно LastWriteTime, ChangeTime будут равны.
После записи файла
CreationTime: 24.09.2010 10:45:55
LastAccessTime: 24.09.2010 18:16:03
LastWriteTime: 24.09.2010 18:16:03
ChangeTime: 24.09.2010 18:16:03

После простого просмотра изменения данных но без записи
CreationTime: 24.09.2010 10:45:55
LastAccessTime: 24.09.2010 18:20:41
LastWriteTime: 24.09.2010 18:16:03
ChangeTime: 24.09.2010 18:16:03

Я бы тоже так поступил наверное если LastWriteTime = ChangeTime то изменений нет, все это для локальных файлов, без примочек для работы с SQL.

Если название файла вернуть обратно(или переместить его обратно в ту папку), магия начинается вновь - открывается старый файл.

Ну тут вообще магия.

После изменения файла (т.е. переименования файла -> А -> опять в первоначальное имя)
CreationTime: 24.09.2010 10:45:55
LastAccessTime: 24.09.2010 18:38:41
LastWriteTime: 24.09.2010 18:16:03
ChangeTime: 24.09.2010 18:38:25

Чуть не забыл: была такая оптимизация - Не производить запись последнего доступа к файлам - отключалась в реестре
HKLM\SYSTEM\CurrentControlSet\Control\FileSystem параметр NtfsDisableLastAccessUpdate = 1

Grem007
28-09-2010, 12:44
Нашел решение проблемы. Во всем виновата папка VirtualStore, про нее достаточно все хорошо описано в разных источниках.




© OSzone.net 2001-2012