Почему я могу записывать файлы в папку только для чтения?

39

Я пробовал это на Windows 7 и Windows XP. Запустите проводник Windows и создайте новую папку во временном расположении, скажем, скажем NonWriteable. Щелкните правой кнопкой мыши папку и установите для свойств папки значение Read-only.

Папка, доступная только для чтения

Теперь откройте папку и создайте новый файл .txt. Это разрешено Зачем? Как установить папку так, чтобы внутри нее ничего нельзя было изменить?

Примечание. Если щелкнуть правой кнопкой мыши файл .txt и установить его, Read-onlyто система корректно предотвратит обновления файла.

AlainD
источник
3
Проверьте расширенные параметры и активно отказывайте в разрешениях на запись. Какой аккаунт вы используете? Административная учетная запись всегда должна иметь возможность что-то менять.
Сет
@Seth Административная учетная запись всегда должна быть в состоянии изменить вещи? Что делать, если кто-то пытается получить доступ к папке на другом компьютере?
взаимосвязанный
2
Windows, кажется, никогда не использовал этот параметр для каталогов. Если он находится на общем диске, вы обнаружите, что Linux не сможет создавать, удалять или переименовывать файлы, если только он не очищен.
AFH
2
@Seth: хороший звонок. После изменения расширенных разрешений на Securityвкладке, чтобы запретить доступ Create Files / Write Data, я теперь не могу создавать новые файлы. Это похоже на ошибку / ограничение Windows. Если я программно вызываю GetFileAttributesAPI для папки, FILE_ATTRIBUTE_DIRECTORYатрибут устанавливается ... но нет FILE_ATTRIBUTE_READONLY.
AlainD
2
Обратите внимание, что начиная с Windows 7, диалоговое окно было изменено, чтобы Read-only (Only applies to files in this folder)было более понятно, что на самом деле делает эта опция. В этом ответе есть скриншот нового диалога .
ComicSansMS

Ответы:

56

В отличие от атрибута «Только чтение» для файла, атрибут «Только чтение» для папки обычно игнорируется Windows, компонентами и аксессуарами Windows и другими программами. Например, вы можете удалять, переименовывать и изменять папку с атрибутом «Только чтение» с помощью проводника Windows.

Атрибуты «Только для чтения» и «Системный» используются только в проводнике Windows для определения того, является ли папка специальной папкой, например системной папкой, вид которой настраивается Windows (например, «Мои документы», «Избранное», «Шрифты», «Загруженные программные файлы»). или папку, настроенную с помощью вкладки «Настройка» диалогового окна «Свойства» папки. В результате проводник Windows не позволяет просматривать или изменять доступные только для чтения или системные атрибуты папок. Если для папки задан атрибут «Только для чтения», это приводит к тому, что Explorer запрашивает у Desktop.ini этой папки информацию о необходимости установки каких-либо специальных параметров папки.

Источник: https://support.microsoft.com/en-gb/help/326549/you-cannot-view-or-change-the-read-only-or-the-system-attributes-of-fo

Это старая статья, но она применима ко всем версиям Windows.

Чтобы предотвратить создание файлов в папке, измените разрешения, используя Securityвкладку в свойствах папки. Нажмите Advancedкнопку и добавьте правило, чтобы запретить доступ Create Files / Write Data.

Дэвид Маршалл
источник
1
@AlainD Да. Это старая статья, но она все еще применима к более новым версиям Windows. Я вернусь и расширю ответ позже.
Дэвид Маршалл,
1
Таким образом, атрибут «только для чтения» для папки не имеет абсолютно никакого отношения к тому, что он предназначен только для чтения? Это не что иное, как сбой huuuuuge UX?
Педро А
6
@Hamsteriffic Это наследие файловой системы FAT. FAT поддерживал только несколько атрибутов файлов, RO был одним из них. NTFS имеет сложный механизм ACL для управления доступом, поэтому атрибуты FAT не имеют значения, когда используется NTFS. Тем не менее, конкретный диалог был разработан много лет назад, когда FAT все еще был распространен и с тех пор никогда не менялся.
дубад
4
@Hamsteriffic Итак, подведем итог комментариям дубовых дубинок: Да.
Александр Косубек
2
@jrh Он написал один в 2003 году на blogs.msdn.microsoft.com/oldnewthing/20030930-00/?p=42353
Дэвид Маршалл,