0

在 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 的写权限。到目前为止,我尝试过:

  1. https://stackoverflow.com/a/7590491/1817029
  2. AddFileSecurity(TEST_FILE_PATH, @"MyDomain\MyUser", FileSystemRights.Write, AccessControlType.Deny);
  3. 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);

在所有情况下,文件仍然可以被删除。我做错了什么?

4

1 回答 1

1

防止意外删除的最简单快捷的方法就是将其设为只读:

File.SetAttributes(path, FileAttributes.ReadOnly);

任何希望修改或删除此文件的代码都必须首先明确删除只读属性(即通过另一个调用SetAttributes)。

您也不应该捕获SystemExceptionException就此而言),无论如何您的示例代码正在处理与文件安全​​无关的 CAS。

于 2013-11-09T13:26:39.757 回答