我正在使用System.IO.Abstractions
(https://github.com/System-IO-Abstractions)来允许将IFileSystem
注入课堂。我最近添加了一段代码来捕获用户尝试在他们没有写权限的目录中创建文件时抛出的UnauthorizedAccessException
。
是否可以设置System.IO.Abstractions
中目录的访问权限?
以下代码与我的代码很接近(MockFileSystem
来自System.IO.Abstractions
)。 AccessControlSections
描述是
指定要保存或加载的安全描述符的哪些部分
看来,我需要设置某种安全描述符,但是我找不到关于它的任何信息,或者这是否是正确的方法。
var mockFileSystem = new MockFileSystem();
mockFileSystem.Directory.CreateDirectory("C:\\Test", new DirectorySecurity("C:\\Test", AccessControlSections.None));
// This should throw an UnauthorizedAccessException
mockFileSystem.File.Create("C:\\Test\\File.txt");
答案 0 :(得分:1)
我尝试过类似的操作,但失败了:
const string path = @"C:\temp\incoming";
var fileSystem = new MockFileSystem();
fileSystem.AddDirectory(path);
var diFactory = fileSystem.DirectoryInfo;
var directoryInfo = diFactory.FromDirectoryName(path);
var directorySecurity = directoryInfo.GetAccessControl();
var currentUser = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
directorySecurity.AddAccessRule(new FileSystemAccessRule(currentUser , FileSystemRights.Read, AccessControlType.Allow));
我仍然认为这或多或少是可行的,不幸的是它不起作用:-(
也许我为AccessRule指定的用户不正确,我也尝试了其他用户,但无济于事:
var adminUser = new SecurityIdentifier(WellKnownSidType.BuiltinAdministratorsSid, null);
// -> Doesn't work either..
无论如何,最后我创建了一个肮脏的解决方法来对其进行测试,并且显然可以正常工作:
var mockFileSystem = new Mock<IFileSystem>();
mockFileSystem.Setup(x => x.File.Create(It.IsAny<string>())).Throws(new Exception());