通过C#开发Windows中有很多文件夹是受系统保护的,比如System Volume Information,中文名称可以翻译为“系统卷标信息”,这个文件夹里就存储着系统还原的备份信息。对于这类系统资源,应用程序是无法直接访问其中的子目录和文件的,所以必须让Windows认为我们程序的当前访问是安全的,才能让我们访问,这就要用到System.Security.AccessControl命名空间了,它提供了有关安全访问系统资源的方法。 下面是C#写的一个获取受保护文件夹的子目录的函数: -
- private DirectoryInfo[] GetDirList(DirectoryInfo dirInfo)
- {
- if (dirInfo == null || !dirInfo.Exists)
- return null;
- DirectoryInfo[] dirInfos = null;
- try
- {
-
- dirInfos = dirInfo.GetDirectories();
- }
- catch { }
-
- if (dirInfos != null)
- return dirInfos;
-
-
- FileSystemAccessRule fsRule = new FileSystemAccessRule(System.Environment.UserName
- , FileSystemRights.Modify, AccessControlType.Allow);
-
-
- DirectorySecurity dirSecurity = dirInfo.GetAccessControl();
- dirSecurity.AddAccessRule(fsRule);
- dirInfo.SetAccessControl(dirSecurity);
-
- try
- {
- dirInfos = dirInfo.GetDirectories();
- }
- catch (Exception ex)
- {
- MessageBox.Show("无法访问文件夹:" + dirInfo.FullName + "\n" + ex.Message);
- }
-
- dirSecurity = dirInfo.GetAccessControl();
- dirSecurity.RemoveAccessRule(fsRule);
- dirInfo.SetAccessControl(dirSecurity);
- return dirInfos;
- }
(责任编辑:admin) |