2008-12-01 4 views
3

Моя функция в значительной степени стандартная функция поиска ... Я включил ее ниже.Каков наилучший способ проверки точки повторной обработки в .net (C#)?

В функции у меня есть 1 строка кода, отвечающая за прополку точек Repart 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); 
     } 
    } 
} 

ответ

3

Никто не имеет разрешения на доступ к System Volume Information, кроме учетной записи SYSTEM. Поэтому либо измените права доступа к каталогу. Или многое, гораздо лучше поймать исключение и продолжать.

15

Я не уверен, что ответ на этот вопрос, но пожалуйста изменить ваш атрибут проверки использовать соответствующие операции побитового!

if (attributes.ToString().IndexOf("ReparsePoint") == -1) 

... гораздо более правильно написано, как ...

if ((attributes & FileAttributes.ReparsePoint) == 0) 
+0

Это отличный совет, спасибо за обмен – 2008-12-01 22:11:39

+8

Или, начиная с .NET 4, `if (attributes.HasFlag (FileAttributes.ReparsePoint))`. – 2011-12-17 17:31:32

1

Возможно, эта статья может помочь вам (они объясняют, как получить доступ к этой папке):

http://support.microsoft.com/kb/309531

Отчаянное решение попробовать - поймать.