在NUnit测试中,我需要检查是否可以删除现有文件。 UnitUnderTest源看起来像:
public static Boolean IsWritePermissionGranted(String absoluteFilePath)
{
Boolean isGranted = true;
try
{
FileIOPermission writePermission = new FileIOPermission(
FileIOPermissionAccess.Write, absoluteFilePath);
writePermission.Demand();
}
catch (SystemException)
{
isGranted = false;
}
return isGranted;
}
在测试用例中,我想撤销TestFile的写入权限。到目前为止我试过了:
AddFileSecurity(TEST_FILE_PATH, @"MyDomain\MyUser", FileSystemRights.Write, AccessControlType.Deny);
DirectoryInfo dInfo = new DirectoryInfo(TEST_FILE_PATH);
DirectorySecurity dSecurity = dInfo.GetAccessControl();
dSecurity.AddAccessRule(new FileSystemAccessRule(
TEST_FILE_PATH, "MyDomain\MyUser", FileSystemRights.Write, AccessControlType.Deny));
dInfo.SetAccessControl(dSecurity);
在所有情况下,仍然可以删除该文件。我做错了什么?
答案 0 :(得分:1)
阻止意外删除的最简单,最快捷的方法就是将其设为只读:
File.SetAttributes(path, FileAttributes.ReadOnly);
任何希望修改或删除此文件的代码都必须首先明确删除只读属性(即另一次调用SetAttributes
)。
你也应该从不抓住SystemException
(或者Exception
),无论如何你的示例代码正在处理与文件安全无关的CAS。