1

Ich verwende Enumerate-Dateien, um alle Dateien in einem Verzeichnis aufzulisten. Er löst eine Ausnahme aus, wenn ein Dateiname gefunden wird, der unzulässige Zeichen enthält, und stoppt dann die foreach-Schleife, die die Dateien auflistet. Wie kann ich die Foreach-Schleife weiterhin Dateinamen trotz der Ausnahme auflisten lassen? Irgendwelche Ideen?Fehler: Ungültige Zeichen im Pfad

Code:

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

Veröffentlichen Sie Ihren Code bitte –

+0

Sie sagen, dass Sie eine Datei mit ungültigen Zeichen auf Ihrer Festplatte gespeichert haben ?? Wie auch immer ... zeige etwas, um mit der Arbeit damit zu beginnen (füge ein try..catch hinzu, füge einen check hinzu, wer weiß!) zeige uns etwas code;) – gbianchi

+0

Es ist mein downloadfolder und es ist voll von Beispielprojekten für verschiedene Programmiersprachen damit es wohl von einer dieser unzähligen Ordner. Ich muss trotzdem einen Weg finden. @BrianRasmussen Ich habe den Code aktualisiert. –

Antwort

2

Sie haben die Try-Catch um die foreach Schleife. Dies bedeutet, dass, wenn einer der Aufrufe innerhalb der Schleife fehlschlägt, der Code den Rest der Schleife abbricht.

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

Sie sollten noch den Versuch haben ... fangen um die EnumerateFiles in dem Fall, dass ein Fehler ausgelöst:

Ändern Sie den Code, so etwas zu sein.

+0

Ich verstehe nicht, warum Sie das 'try/catch' in die' Console.WriteLine' verschieben möchten ...? Denkst du, dass die 'Console.WriteLine' die Ausnahme auslöst? Es scheint wahrscheinlich, dass die "IEnumerable.Current" oder "IEnumerable.MoveNext" ist, was hier wirft ... –

+0

Danke Kumpel :) Es funktioniert perfekt jetzt! –

+0

@ChrisF Und ja, aus irgendeinem Grund war es die Console.WriteLine, die die Ausnahme ausgelöst hat. –