1

Я наткнулся на то, что я считаю довольно странным поведением 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-разрядные видят другую версию? Кто-нибудь может объяснить это и задокументировано ли это поведение где-нибудь?

0