2017-06-07 2 views
2

Ich arbeite in C# und ich versuche, ein Programm zu tun, das einige Informationen über die Dateien in einem Verzeichnis erhalten. Ich habe es geschafft, aber ich habe ein Problem mit der Fehlerbehandlung. Wenn das Programm läuft und zum Beispiel gebe ich Zufallszahl nur Datei infoes ich diese Fehlermeldung zur Liste:System io Datei nicht gefunden Ausnahme/Fehlerbehandlung

„System.IO.DirectoryNotFoundException:“ C ‚kann nicht einen Teil des Weges finden‘: \ Temp \ first_project \ first_project \ bin \ Debug \ 12345' . '“

Bitte jemand mir helfen, die Fehlerbehandlung zu tun.

Vielen Dank im Voraus.

using System; 
    using System.IO; 
    class Test 
     { 
      static void Main(string[] args) 
      { 
       Console.WriteLine("Please :"); 
       string hely = Console.ReadLine(); 
       string[] __file = Directory.GetFiles(hely); 
       string[] __dir = Directory.GetDirectories(hely); 

       foreach (string i in __file) 
       { 
        FileInfo fajl = new FileInfo(i); 
        Console.WriteLine("{0},{1},{2}", fajl.Name, fajl.Extension, fajl.LastWriteTime.ToString()); 
       } 
       foreach (string i in __dir) 
       { 
        DirectoryInfo _file = new DirectoryInfo(i); 
        Console.WriteLine("{0},{1},{2}", _file.Name, _file.Extension, _file.LastWriteTime.ToString()); 
       } 


      Console.ReadKey(); 
      } 

     } 
+5

Nun, wir wissen nicht, was Sie tun wollen * * wenn das Verzeichnis der Benutzer Angebote gibt es nicht. Grundsätzlich sollten Sie 'FileNotFoundException' einfangen und auf diese Weise machen, was Sie wollen, aber wir können Ihnen nicht wirklich helfen, ohne dass Sie deutlicher erkennen, was Sie erreichen wollen oder was Sie bereits versucht haben. –

Antwort

0

Verwenden try catch

using System; 
    using System.IO; 
    class Test 
     { 
      static void Main(string[] args) 
      { 
       Console.WriteLine("Please :"); 
       string hely = Console.ReadLine(); 

       try 
       { 
        string[] __file = Directory.GetFiles(hely); 
        string[] __dir = Directory.GetDirectories(hely); 
        foreach (string i in __file) 
        { 
         FileInfo fajl = new FileInfo(i); 
         Console.WriteLine("{0},{1},{2}", fajl.Name, fajl.Extension, fajl.LastWriteTime.ToString()); 
        } 

        foreach (string i in __dir) 
        { 
         DirectoryInfo _file = new DirectoryInfo(i); 
         Console.WriteLine("{0},{1},{2}", _file.Name, _file.Extension, _file.LastWriteTime.ToString()); 
        } 
       } 
       catch(System.IO.DirectoryNotFoundException ex) 
       { 
        Console.WriteLine("Directory not found"); 
       } 

       Console.ReadKey(); 
      } 

     } 
0

Sie überprüfen können, ob die file exists

foreach (string i in __file) 
{ 
    if (File.Exists(i)) 
    { 
     FileInfo fajl = new FileInfo(i); 
     Console.WriteLine("{0},{1},{2}", fajl.Name, fajl.Extension, fajl.LastWriteTime.ToString()); 
    } 
} 
2

Sie sollten

System.IO.Directory.Exists(directory) 

mit

Existenz eines Pfad überprüfen und einer Datei mit

System.IO.File.Exists(filePath) 

Dann n. Sie Wenn Sie den try-catch-Block in der for-Schleife verwenden möchten, um mögliche Ausnahmen zu erkennen, die aufgrund unzureichender Rechte/Berechtigungen auftreten.

z.B.

foreach (string i in __file) 
{ 
    try 
    { 
     FileInfo fajl = new FileInfo(i); 
     Console.WriteLine("{0},{1},{2}", fajl.Name, fajl.Extension, fajl.LastWriteTime.ToString()); 
    } 
    catch (System.Exception ex) 
    { 
     System.Console.WriteLine(ex.Message); 
     throw; 
    } 

} 

Sie könnten auch zwei try-catch-Blöcke erstellen - hängt davon ab, was Sie tun möchten.

try 
{ 
    foreach (string i in __file) 
    { 
     try 
     { 
      FileInfo fajl = new FileInfo(i); 
      Console.WriteLine("{0},{1},{2}", fajl.Name, fajl.Extension, fajl.LastWriteTime.ToString()); 
     } 
     catch (System.Exception ex) 
     { 
      System.Console.WriteLine(ex.Message); 
      throw; 
     } 

    } 
} 
catch (System.Exception exLoop) 
{ 
    System.Console.WriteLine(exLoop.Message); 
    throw; 
} 

Beachten Sie, dass in Ihrem Beispiel, sollten Sie zunächst prüfen, ob das Verzeichnis „hely“ existiert:

if (!System.IO.Directory.Exists(hely)) 
{ 
    System.Console.Error.WriteLine("Directory \"{0}\" does not exist.", hely); 
    System.Environment.Exit(1); 
    // or: return; 
} 

Da die Ausnahmebehandlung ist in der Regel sehr langsam, ich würde aber empfehlen, dass Sie für die Existenz überprüfen der Datei/des Verzeichnisses explizit. Es wäre auch eine gute Idee, dies für die Datei/Verzeichnis-Auflistung & Lesezugriffsrechte für den jeweiligen Benutzer zu tun. Aber selbst wenn Sie dies tun, behalten Sie den Versuch-Fang, weil es Fälle geben kann, in denen Ihr Programm plötzlich versagt - z. wenn ein entfernbarer Speicher gewaltsam entfernt wird.

0

RTFM?

Lesen Directory.GetFiles method

Es heißt, dass Sie die DirectoryNotfound Ausnahme erhalten, wenn der angegebene Pfad nicht gefunden wird. Offensichtlich existiert der Ordner 'C: \ Temp \ first_project \ first_project \ bin \ Debug \ 12345' nicht.

Proper Code wäre:

string hely = ... 
try 
{ 
    string[] files = Directory.GetFiles(hely); 
    ProcessFiles(files); 
} 
catch (DirectoryNotFoundException exc) 
{ 
    Console.WriteLine(exc.Message); 
} 

Wenn Sie nicht wissen, wie sie reagieren auf Ausnahmen lesen MSDN about exception handling