Каков наилучший способ проверить точку повторной обработки в .net (c #)? - PullRequest
3 голосов
/ 02 декабря 2008

Моя функция в значительной степени стандартная функция поиска ... Я включил ее ниже.

В функции у меня есть 1 строка кода, отвечающая за отсеивание.

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);
        }
    }
}

Ответы [ 4 ]

16 голосов
/ 02 декабря 2008

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

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

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

if ((attributes & FileAttributes.ReparsePoint) == 0)
3 голосов
/ 02 декабря 2008

Никто не имеет разрешения на доступ к информации о томах системы, кроме учетной записи SYSTEM. Так что либо меняйте права доступа к каталогу. Или гораздо лучше поймать исключение и продолжать.

1 голос
/ 02 декабря 2008

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

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

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

0 голосов
/ 28 июня 2018

Как только вы получите последние разрешения и действительно захотите проверить точки соединения, этот класс обеспечивает тестирование, создание и удаление точек соединения с помощью вызова DeviceIoControl kernel32 и анализ точки повторной обработки.

...