文件属性获取时拒绝访问的异常 调用DirectoryInfo的GetFiles()时,遍历时,遇到某些隐藏系统文件报权限或安全类异常,如何处理,比如我要访问获取给定目录大小 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 通过C#开发Windows中有很多文件夹是受系统保护的,比如System Volume Information,中文名称可以翻译为“系统卷标信息”,这个文件夹里就存储着系统还原的备份信息。对于这类系统资源,应用程序是无法直接访问其中的子目录和文件的,所以必须让Windows认为我们程序的当前访问是安全的,才能让我们访问,这就要用到 System.Security.AccessControl命名空间了,它提供了有关安全访问系统资源的方法。下面是C#写的一个获取受保护文件夹的子目录的函数://注意添加名称空间的引用:using System.Security.AccessControl;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;}参考地址:http://www.cnblogs.com/JieDavid/articles/1435071.html 1楼是用C#代码编程访问方式平时可以在资源管理器中手工设置 NTFS分区目录的访问权限 (注意:用administrator身份登录)如何获得对 System Volume Information 文件夹的访问 dirInfo.Attributes看看这个值的 如何给ActiveX控件传递泛型值? 表单提交向数据库添加记录的问题 两个DataSet问题?解决立马给分 如何编写一画笔程序 求助,一个关于线程习题的源代码?(要求按题目解决) nhibernate2.0生成oracle实体类字段类型问题 我打算去深圳,有没有朋友给点建议? 视频叠加 高分求教!!! c#中关于listview控件 如何实现内部内容的拖动排序,可以多选拖动 <asp:ImageButton 事件怎么不响应 Sql 数据类型选择 Access 怎样比较日期
{
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;
}参考地址:http://www.cnblogs.com/JieDavid/articles/1435071.html
如何获得对 System Volume Information 文件夹的访问
看看这个值的