我的功能几乎是一个标准的搜索功能...我已将它包含在下面。
在函数中,我有1行代码负责清除重新分配NTFS点。
if (attributes.ToString().IndexOf("ReparsePoint") == -1)
问题是我现在收到错误
Access to the path 'c:\System Volume Information' is denied.
我调试了代码,运行时该目录的唯一属性是:
System.IO.FileAttributes.Hidden
| System.IO.FileAttributes.System
| System.IO.FileAttributes.Directory
我正在Windows 2008服务器上执行此代码,有什么想法可以解决这个失败的问题吗?
public void DirSearch(string sDir)
{
foreach (string d in Directory.GetDirectories(sDir))
{
DirectoryInfo dInfo = new DirectoryInfo(d);
FileAttributes attributes = dInfo.Attributes;
if (attributes.ToString().IndexOf("ReparsePoint") == -1)
{
foreach (string f in Directory.GetFiles(d, searchString))
{
//lstFilesFound.Items.Add(f);
ListViewItem lvi;
ListViewItem.ListViewSubItem lvsi;
lvi = new ListViewItem();
lvi.Text = f;
lvi.ImageIndex = 1;
lvi.Tag = "tag";
lvsi = new ListViewItem.ListViewSubItem();
lvsi.Text = "sub bugger";
lvi.SubItems.Add(lvsi);
lvsi = new ListViewItem.ListViewSubItem();
lvsi.Text = d;//"C:\\Users\\Administrator\\Downloads\\MediaMonkey.GOLD.EDITION.v.3.0.2.1134.[Darkside].[Demonoid].[Grim.Reaper]";
lvi.SubItems.Add(lvsi);
listView1.Items.Add(lvi);
}
DirSearch(d);
}
}
}
答案 0 :(得分:16)
我不确定问题的答案是什么,但请更改属性检查以使用正确的按位操作!
if (attributes.ToString().IndexOf("ReparsePoint") == -1)
...写得更准确......
if ((attributes & FileAttributes.ReparsePoint) == 0)
答案 1 :(得分:3)
除SYSTEM帐户外,没有人有权访问系统卷信息。因此要么更改目录的权限。或者更好,抓住异常并继续下去。
答案 2 :(得分:1)
答案 3 :(得分:0)
一旦获得过去的权限,并且真的想测试连接点,this class就会通过使用DeviceIoControl kernel32调用和分析重分析点来测试,创建和删除连接点。