2016-10-13 2 views
-1

Ich habe eine DirectoryNotFoundException in einer TXT-Datei, wenn ich den vollständigen Pfad verwende es funktioniert aber ich möchte nicht den vollständigen Pfad verwenden, weil ich das Programm arbeiten will, egal wo es platziert ist (Kompatibilität mit dem Maximum des Computers)Wie kann ich diese DirectoryNotFoundException beheben?

Hier ist mein Code

private void SaveClose_Click(object sender, RoutedEventArgs e) 
{ 
    if (Windowed.IsChecked == true) 
     windowed = true; 
    else 
     windowed = false; 

    string textWriteWindowed; 

    if (windowed == true) 
    { 
     textWriteWindowed = "-screen-fullscreen 0" + Environment.NewLine; 
    } 
    else 
    { 
     textWriteWindowed = "-screen-fullscreen 1" + Environment.NewLine; 
    } 

    var selectedResolution = ResolutionBox.SelectedItem.ToString(); 
    var split = selectedResolution.Split('x'); 
    widthChoose = Int32.Parse(split[0]); 
    heightChoose = Int32.Parse(split[1]); 

    string textWriteWidth; 
    textWriteWidth = "-screen-width " + widthChoose + Environment.NewLine; 

    string textWriteHeight; 
    textWriteHeight = "-screen-height " + heightChoose + Environment.NewLine; 

    File.WriteAllText(@"\Resources\arguments.txt", textWriteWindowed); 
    File.AppendAllText(@"\Resources\arguments.txt", textWriteWidth); 
    File.AppendAllText(@"\Resources\arguments.txt", textWriteHeight); 

    this.Close(); 
} 
+0

Wenn Sie sofortiges Downvote erhalten; -; – Francefire

+0

Versuchen Sie zuerst zu überprüfen, ob das Verzeichnis existiert [Directory.Exists-Methode] (https://msdn.microsoft.com/de-de/library/system.io.directory.exists (v = vs.110) .aspx) – phifi

+0

Die "arguments.txt" befindet sich in einem Ordner namens "Ressources" neben meinem Programm. Ich verstehe nicht, warum es mir sagt, wie soll ich es schreiben? – Francefire

Antwort

0

Sie prüfen, ob der Ordner vorhanden ist, bevor die Datei speichern,

wenn Ordner nicht erstellen existieren sie mit

Directory.CreateDirectory(...) 

Directory.Exists(..) 

können Sie verwenden Ordner Existenz als Eingabe

+0

Ich nicht weiß wo ich sie hinbekomme ^^ ' – Francefire

1

Das erste Argument von File.WriteAllText nimmt einen Pfad zu überprüfen. Was auch immer Sie erwähnt haben, ist nicht der absolute Pfad, sondern nur der relative Pfad der Datei. WriteAllText erstellt die Datei, erstellt das Verzeichnis jedoch nicht selbst. So etwas wie:

File.WriteAllText(@"\arguments.txt", textWriteWindowed); 

arbeiten soll (und die Datei in dem entsprechenden Laufwerk erstellen), aber

File.WriteAllText(@"\Resources\arguments.txt", textWriteWindowed); 

wird nicht funktionieren. Wenn Sie also eine Datei im Pfad erstellen möchten, wo die Anwendung befindet, können Sie so etwas wie:

string folder=Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName); 
File.WriteAllText(@"\arguments2.txt", "ABC"); 

Wenn Sie ein Verzeichnis erstellen möchten, dann könnte man so etwas wie:

System.IO.FileInfo file = new System.IO.FileInfo(filePath); 
file.Directory.Create();// If the directory already exists, this method does nothing. 

System.IO.File.WriteAllText(file.FullName, textWriteWindowed); 

Hoffe das beantwortet Ihre Anfrage.

+0

Hallo danke für deine Antwort, wofür ist das ABC? und warum "Argumente ** 2 **. txt" – Francefire

0

Ich weiß nicht, wie, aber für mich, dass arbeitete vorgehen:

File.WriteAllText(@"./arguments.txt", textWriteWindowed); File.AppendAllText(@"./arguments.txt", textWriteWidth); File.AppendAllText(@"./arguments.txt", textWriteHeight);

0

Wenn Sie den lokalen Pfad der Datei diese Anwendung Sie ausführen erhalten wollte:

var fInfo = new FileInfo(System.Reflection.Assembly.GetCallingAssembly().Location); 

Von dort würden Sie wie folgt vor:

var parentDir = new DirectoryInfo(fInfo.DirectoryName); 
var subDir = new DirectoryInfo(parentDir.FullName + "Resource"); 
if(!subDir.Exists) 
    subDir.Create(); 

Dies würde sicherstellen, dass Sie immer einen Ordner im Verzeichnis Ihrer ausführbaren Datei haben. Aber nur damit Sie wissen, das ist absolut schrecklicher Code und sollte niemals in einer produktionsähnlichen Umgebung implementiert werden. Was passiert, wenn sich ein Systemadministrator entscheidet, sein Programm/Ordner in einem Bereich zu platzieren, auf den der aktuelle Benutzer keinen Zugriff hat/schreibt? Der beste Ort zum Schreiben ist% APPDATA%. Dies stellt sicher, dass der Benutzer immer über Lese-/Schreibberechtigungen für das verfügt, was Sie erreichen möchten.

Verwandte Themen