Я наткнулся на то, что я считаю довольно странным поведением Windows 7 (это может относиться и к более поздним версиям Windows, но я тестирую на Win7) для файлов в определенных местах, и я не могу найти какую-либо информацию об этом в Google, поэтому мне было интересно, может ли кто-нибудь, кто знает о внутренностях Windows, объяснить мне это.
Таким образом, в основном, это поведение проявляется для файлов в определенных каталогах. Я не уверен, какие именно, но, похоже, некоторые каталоги включены в Program Files (x86)
; для тестирования я использовал каталог установки для Europa Universalis 3, который называется Program Files (x86)\Paradox Interactive\Europa Universalis III
.
Это относится к файлам, уже находящимся в каталоге, но для создания чистой воспроизводимой демонстрации я начал с создания файла text.txt
на рабочем столе. Файл содержал текст:
Hello world!
Мне нравится использовать EditPad Lite 5.4.0 для моего основного текстового редактора (да, я знаю, что он старый, но я привык к нему), но у меня также установлен Vim для Windows 8.0.586. Когда я открываю файл в одном из них, я вижу один и тот же текст, а когда я редактирую текст в обоих, обе программы видят один и тот же отредактированный текст. Все идет нормально.
Я копирую файл в Program Files (x86)\Paradox Interactive\Europa Universalis III
и получаю запрос на доступ администратора, чтобы иметь возможность скопировать файл, что я разрешаю. Вот тут и начинается странность. Я открываю этот скопированный файл в EditPad Lite, добавляю текст и сохраняю (файл не отображается только для чтения):
Hello world!
Edited with EditPad Lite.
Затем я открываю файл с помощью Vim, и Vim показывает его старую версию:
Hello world!
Я пытаюсь отредактировать и сохранить, но Vim видит этот файл только для чтения! Поэтому я открываю Vim от имени администратора, редактирую файл и сохраняю:
Hello world!
Edited with Vim.
Когда я снова открываю файл с помощью EditPad Lite, я вижу версию файла EditPad! Итак, теперь у нас есть 2 версии файла, которые я буду называть "версией EditPad" и "версией Vim".
Версия "EditPad" (НЕ только для чтения):
Hello world!
Edited with EditPad Lite.
Версия "Vim" (только для чтения):
Hello world!
Edited with Vim.
Даже перезагрузка ничего не меняет, так что это не похоже на кэширование памяти в Windows; он фактически сохраняет эти 2 разные версии файла на диск! После дальнейших экспериментов я определил, что разные программы, похоже, имеют доступ к разным версиям файла:
"Vim" версия файла:
- Vim 8.0.586
- Vim 8.0.586 как администратор
- 7-Zip 16.04 (64-разрядная версия)
- проводник Виндоус
- Блокнот для Windows 7
Версия файла "EditPad":
- EditPad Lite 5.4.0
- Европа Универсалис 3
- Блокнот Windows XP
Что на Земле делает Windows 7 здесь? Почему он представляет две разные версии файла, одна из которых доступна только для чтения, а другая нет? Мое предположение состоит в том, что используются два разных системных вызова, и Windows 7 представляет разные версии файла для разных вызовов, или, возможно, 64-разрядные программы видят одну версию файла, а 32-разрядные видят другую версию? Кто-нибудь может объяснить это и задокументировано ли это поведение где-нибудь?