c# Отказано в доступе для перемещения обычной пользовательской папки даже после настройки доступа и разрешений - PullRequest
0 голосов
/ 19 июня 2020

Я хочу переместить небольшую обычную пользовательскую папку под новое имя, но операция Directory.Move(src,dest) завершается неудачно, что бы я ни делал. Ошибка: «Доступ к пути XXXX запрещен».

Папка содержит проект Visual Studio, в котором есть несколько файлов (все обычные разрешения) и несколько папок (все с установленным флагом только для чтения). В настройках безопасности папки имеют полный доступ для СИСТЕМЫ и администраторов (из которых я являюсь одним из них; это моя домашняя машина), но не полный доступ для аутентифицированных пользователей и еще меньше прав для всех пользователей.

проблема возникает в модульном тесте VS, хотя я могу легко изменить разрешения в проводнике за пределами VS. Интересно, могут ли модульные тесты VS использовать какие-то особые (меньшие) разрешения, которые не позволяют моему тестовому коду устанавливать разрешения вне VS.

Я пробовал различные фрагменты кода из net и SO, чтобы попытаться установить разрешения папки, но безуспешно. Например, я попытался установить ~FileAttributes.ReadOnly в атрибутах информации о каталоге (но это каталог, а не файл).

Я даже не могу изменить права доступа к папке верхнего уровня с помощью кода, такого как показано ниже .

public static void
    FolderPermissionsSet(string folderPath) {
    var directoryInfo = new DirectoryInfo(folderPath);
    var directorySecurity = directoryInfo.GetAccessControl();
    var currentUserIdentity = WindowsIdentity.GetCurrent();
    var fileSystemRule = new FileSystemAccessRule(
      currentUserIdentity.Name,
      FileSystemRights.FullControl,
      InheritanceFlags.ObjectInherit |
      InheritanceFlags.ContainerInherit,
      PropagationFlags.None,
      AccessControlType.Allow);

    directorySecurity.AddAccessRule(fileSystemRule);
    directoryInfo.SetAccessControl(directorySecurity);
  }

Может ли кто-нибудь сказать мне, что я делаю не так или что еще нужно сделать, чтобы отключить бит только для чтения в папках, чтобы я мог перемещать дерево папок, используя Directory.Move() для перемещения папку (особенно в модульном тесте)? Я исчерпал свои знания. Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...