Я хочу переместить небольшую обычную пользовательскую папку под новое имя, но операция 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()
для перемещения папку (особенно в модульном тесте)? Я исчерпал свои знания. Спасибо.