Основной способ перечисления списка файлов из каталога

Привет всем, я работаю с программным обеспечением для подсчета каталогов и файлов.

Здесь, когда я получаю или ищу файлы из C:\ или D:\, он выдает UnAuthorizedAccessException

Я хочу перечислить файлы, игнорируя файл/каталог, который недоступен

Как ?? C# Visual Studio 2008 Только .NET Framework 3.5.

Мой код

var files = FastDirectoryEnumerator.EnumerateFiles(path, "*.reg.zip", 
                 SearchOption.AllDirectories)
                .GroupBy(f => f.Name).Select(g => g.First());

Здесь я беру файлы, которые заканчиваются на .reg.zip

Я хочу найти его на всем компьютере.. Но исключение..

Пользователь по умолчанию VS 2008. Я пробовал app.manifest с

    <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

но даже если Исключение.. при поиске в каталоге SystemVolumeInformation..


person Gokul E    schedule 13.08.2013    source источник
comment
Во-вторых, пример методологии, которую вы используете, действительно поможет. Кроме того, под каким профилем работает VS? Какие разрешения у этой учетной записи?   -  person CodeBeard    schedule 13.08.2013
comment
FastDirectoryEnumerator не является частью .net framework. Исключение происходит внутри. Если это ваш код, вы должны показать это тоже. Если это чужой код, вам нужно обратиться к ним за помощью.   -  person Scott Chamberlain    schedule 13.08.2013
comment
stackoverflow.com/questions/8548012/   -  person phillip    schedule 13.08.2013
comment
Нет, нет. Я получил это от CodeProject.Com ссылка   -  person Gokul E    schedule 13.08.2013
comment
but even though Exception Какое исключение? В каком коде?   -  person tnw    schedule 13.08.2013
comment
UnAuthorizedAccessException При поиске в SystemVolumeInformation каталоге `D:`   -  person Gokul E    schedule 13.08.2013
comment
@phillip Directory.EnumerateDirectories Это из .NET 4.0, но я использую только .NET 3.5..   -  person Gokul E    schedule 13.08.2013
comment
Почему бы просто не поймать исключение и продолжить?   -  person tnw    schedule 13.08.2013
comment
В примере @phillip вы увидите, что он перехватывает выброшенное исключение UnAuthorizedAccessException и игнорирует его, чтобы «продолжить работу». Я думаю, вам придется вырваться из вашего беглого шаблона linq, чтобы иметь возможность перехватывать эти исключения.   -  person CodeBeard    schedule 13.08.2013
comment
@ScottChamberlain ищу просто как FastDirectoryEnumerator.EnumerateFiles("D:\\","*.reg.zip",SearchOption.AllDirectories); Итак, здесь каталог SystemVolumeInformation включен в .NET по умолчанию. Как я могу предотвратить поиск в таких каталогах????   -  person Gokul E    schedule 13.08.2013
comment
@Gokul, для тебя важна увеличенная скорость FastDirectoryEnumerator?   -  person CodeBeard    schedule 13.08.2013
comment
@CodeBeard без Linq.??? или .. Может быть, я могу редактировать FastDirectoryEnumerator Класс .. но мне нужна помощь, чтобы пройти .. AM Извините за мой уровень ...   -  person Gokul E    schedule 13.08.2013
comment
@CodeBeard Да, сэр, потому что у меня более 125 324 таких файлов .. так что я подсчитываю .. немного быстрее ..   -  person Gokul E    schedule 13.08.2013
comment
@Gokul Я могу ошибаться, но вы используете FastDirectoryEnumerator для перечисления файлов, исключение выдается «где-то», когда вы работаете с файловой системой. Я не знаком с этой библиотекой, но вам придется перехватывать это исключение и отбрасывать его, не выходя из перечисления.   -  person CodeBeard    schedule 13.08.2013
comment
Да, сэр.. Я должен.. @CodeBeard..   -  person Gokul E    schedule 14.08.2013


Ответы (1)


Начну с того, что это не лучший совет. Тем не менее, это место для начала. Мой ответ состоит из двух частей:

Во-первых, я думаю, что вы преждевременно оптимизировали, используя FastDirectoryEnumerator, прежде чем понять проблемы безопасности на уровне файловой системы, с которыми вы столкнетесь в своем проекте. Таким образом, если позволяет время, я бы порекомендовал более простое решение, рекомендованное в сообщении, на которое ссылается @phillip в комментариях (UnauthorizedAccessException при получении файлов). Для удаленно современной машины файлы размером 120 КБ не должны быть проблемой.

Во-вторых, глядя на статистику скорости FastDirectoryEnumerator, я вижу привлекательность его использования. Немного покопавшись в коде, я вижу, что он никак не защищает вас от исключений разрешений при использовании так, как вы это сделали. По сути, это процедурный код, обернутый внутри метода IEnumerable MoveNext. Сам метод MoveNext был сделан рекурсивным для обработки подкаталогов.

Я не могу проверить этот следующий бит, поэтому вам придется поэкспериментировать. Если вы хотите поэкспериментировать с FastDirectoryEnumerator, первое, что вы можете попробовать, это блок try catch вокруг создания нового объекта FileData.

public FileData Current { get { return new FileData(m_path, m_win_find_data); } }

Если это не сработает, вам придется использовать метод GetNext(), чтобы перехватить исключение в нужном месте. Возможно, вам придется реализовать шаблон NullObject для FileData. Я надеюсь, что это поможет в некотором роде.

person CodeBeard    schedule 13.08.2013