.NET中如何访问被系统保护的文件夹

  Windows中有很多文件夹是受系统保护的,比如System Volume Information,中文名称可以翻译为“系统卷标信息”,这个文件夹里就存储着系统还原的备份信息。对于这类系统资源,应用程序是无法直接访问其中的子目录和文件的,所以必须让Windows认为我们程序的当前访问是安全的,才能让我们访问,这就要用到System.Security.AccessControl命名空间了,它提供了有关安全访问系统资源的方法。

    下面是C#写的一个获取受保护文件夹的子目录的函数:

  1. //注意添加名称空间的引用:using System.Security.AccessControl;
  2. private DirectoryInfo[] GetDirList(DirectoryInfo dirInfo)
  3. {
  4.     if (dirInfo == null || !dirInfo.Exists)
  5.         return null;
  6.     DirectoryInfo[] dirInfos = null;
  7.     try
  8.     {
  9.         //一般情况下,按正常方法获取目录列表
  10.         dirInfos = dirInfo.GetDirectories();
  11.     }
  12.     catch { }
  13.     //如果不为空,那么说明目录列表成功,否则需要添加安全访问规则
  14.     if (dirInfos != null)
  15.         return dirInfos;
  16.     //新建账户安全访问规则
  17.     FileSystemAccessRule fsRule = new FileSystemAccessRule(System.Environment.UserName
  18.         , FileSystemRights.Modify, AccessControlType.Allow);
  19.     //添加安全访问规则
  20.     DirectorySecurity dirSecurity = dirInfo.GetAccessControl();
  21.     dirSecurity.AddAccessRule(fsRule);
  22.     dirInfo.SetAccessControl(dirSecurity);
  23.     try
  24.     {
  25.         dirInfos = dirInfo.GetDirectories();
  26.     }
  27.     catch (Exception ex)
  28.     {
  29.         MessageBox.Show("无法访问文件夹:" + dirInfo.FullName + "/n" + ex.Message);
  30.     }
  31.     //移除安全访问规则
  32.     dirSecurity = dirInfo.GetAccessControl();
  33.     dirSecurity.RemoveAccessRule(fsRule);
  34.     dirInfo.SetAccessControl(dirSecurity);
  35.     return dirInfos;
  36. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值