C #: редактировать контроль доступа к файлам - PullRequest
0 голосов
/ 31 октября 2011

привет, я работаю над проектом c # и пытаюсь заблокировать файл от открытия, копирования или даже удаления с использованием этого кода:

FileInfo fi = new FileInfo(textBox1.Text);
            FileSecurity ds = fi.GetAccessControl();
            ds.AddAccessRule(new FileSystemAccessRule("Authenticated Users",      FileSystemRights.FullControl, AccessControlType.Deny));
            fi.SetAccessControl(ds);

но когда я открываю файл, он открывается и может быть удален, что-то не так с моим кодом?

кстати, этот код отлично работает на любом устройстве, кроме флешки, я могу заблокировать редактирование или копирование файлов с компьютера, но на флешке приложение бесполезно.

1 Ответ

2 голосов
/ 31 октября 2011

Какая файловая система у вашей флешки? Я предполагаю FAT32, а не NTFS.

FAT32 не имеет концепции списков ACL для каждого файла (или, насколько мне известно, понятия ACL вообще не существует).

См. Эту статью:

http://technet.microsoft.com/en-us/library/cc783530(WS.10).aspx

На томе FAT или FAT32 вы можете устанавливать разрешения для общих папок, но не для файлов и папок в общей папке. Более того, разрешения общего доступа на томе FAT или FAT32 ограничивают только сетевой доступ, но не доступ пользователям, работающим непосредственно на компьютере.

Единственным вариантом будет открыть файл в режиме эксклюзивного доступа, чтобы другие пользователи не могли изменить его во время чтения .

См. Этот вопрос (украдено из комментария Виталия):

Как заблокировать файл

Код из принятого ответа:

using (FileStream fs = 
       File.Open("MyFile.txt", FileMode.Open, FileAccess.Read, FileShare.None))
{
    // use fs
}
...