在.net(c#)中检查重新分析点的最佳方法是什么?

Mic*_*l L 3 .net c# ntfs reparsepoint

我的功能几乎是一个标准的搜索功能...我已将它包含在下面.

在函数中,我有一行代码负责清除重新分配NTFS点.

if (attributes.ToString().IndexOf("ReparsePoint") == -1)
Run Code Online (Sandbox Code Playgroud)

问题是现在我收到了一个错误 Access to the path 'c:\System Volume Information' is denied.

我调试了代码,运行时该目录的唯一属性是:

  System.IO.FileAttributes.Hidden 
| System.IO.FileAttributes.System 
| System.IO.FileAttributes.Directory
Run Code Online (Sandbox Code Playgroud)

我正在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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Gre*_*ech 16

我不确定问题的答案是什么,但更改属性检查以使用正确的按位操作!

if (attributes.ToString().IndexOf("ReparsePoint") == -1)
Run Code Online (Sandbox Code Playgroud)

...写得更准确......

if ((attributes & FileAttributes.ReparsePoint) == 0)
Run Code Online (Sandbox Code Playgroud)

  • 或者,从.NET 4开始,`if(attributes.HasFlag(FileAttributes.ReparsePoint))`. (8认同)