Каков наилучший способ проверить точку повторной обработки в.net (C#)?
Моя функция в значительной степени стандартная функция поиска... Я включил ее ниже.
В функции у меня есть 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 ответа
Никто не имеет разрешения на доступ к информации о томах системы, кроме учетной записи SYSTEM. Так что либо меняйте права доступа к каталогу. Или намного, намного лучше поймайте исключение и продолжайте.
Я не уверен, что ответ на этот вопрос, но, пожалуйста, измените проверку атрибута, чтобы использовать правильные побитовые операции!
if (attributes.ToString().IndexOf("ReparsePoint") == -1)
... гораздо правильнее написано как...
if ((attributes & FileAttributes.ReparsePoint) == 0)
Возможно, эта статья поможет вам (они объясняют, как получить доступ к этой папке):
http://support.microsoft.com/kb/309531
Отчаянное решение - попробуй - поймай.
Как только вы получите прошлые разрешения и действительно захотите проверить точки соединения, этот класс обеспечивает тестирование, создание и удаление точек соединения с помощью вызова DeviceIoControl kernel32 и анализ точки повторной обработки.