如何撤消文件的写入权限,使其无法在C#中删除

时间:2013-11-09 13:21:28

标签: c# .net file-permissions

在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 个答案:

答案 0 :(得分:1)

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

File.SetAttributes(path, FileAttributes.ReadOnly);

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

你也应该从不抓住SystemException(或者Exception),无论如何你的示例代码正在处理与文件安全​​无关的CAS。