1

Я использую enumeratefiles для перечисления всех файлов в каталоге. Он выдает исключение, когда он сталкивается с именем файла, содержащим недопустимые символы, а затем останавливает цикл foreach, в котором перечисляются файлы. Как я могу заставить цикл foreach продолжать перечислять имена файлов, несмотря на исключение? Есть идеи?Ошибка: Незаконные символы в пути

Код:

try { 

DirectoryInfo directory = new DirectoryInfo(targetPath); 
IEnumerable<FileInfo> allfiles = directory.EnumerateFiles("*.*", SearchOption.AllDirectories); 

foreach (FileInfo file in allfiles) 
{ 
    Console.WriteLine(file.Name); 
} 

} 
catch (ArgumentException o) 
{ 
    Console.WriteLine("Error: {0}", o.Message); 
} 
+0

Оставьте свой код –

+0

, вы говорите, что у вас есть файл с недопустимыми символами, хранящимися на вашем жестком диске ?? в любом случае .. показать что-то, чтобы начать работать с ним (добавьте try..catch, добавьте чек, кто знает!) покажите нам какой-то код;) – gbianchi

+0

Его моя папка для загрузки и ее полные примеры проектов для разных языков кодирования, так что это, вероятно, из одна из этих бесчисленных папок. Я все же должен найти способ обойти это. @BrianRasmussen Ive обновил код. –

ответ

2

Вы можете попробовать поймать вокруг петли foreach. Это означает, что если какой-либо из вызовов внутри цикла завершится неудачно, ваш код прервет оставшуюся часть цикла.

Изменить код, чтобы быть что-то вроде этого:

foreach (FileInfo file in allfiles) 
{ 
    try 
    { 
     Console.WriteLine(file.Name); 
    } 
    catch (ArgumentException o) 
    { 
     Console.WriteLine("Error: {0}", o.Message); 
    } 
} 

Вы все еще должны иметь попробовать ... поймать вокруг EnumerateFiles в том случае, выдает сообщение об ошибке.

+0

Я не понимаю, почему вы хотите переместить 'try/catch' вокруг' Console.WriteLine' ...? Считаете ли вы, что 'Console.WriteLine' выбрасывает исключение? Похоже, что 'IEnumerable.Current' или' IEnumerable.MoveNext' - вот что бросает здесь ... –

+0

Спасибо, парень :) Он отлично работает сейчас! –

+0

@ChrisF И да, по какой-то причине именно Console.WriteLine выбрасывает исключение. –

Смежные вопросы