2017-03-03 5 views
0

Ich habe eine TXT-Datei, die in eine Listbox geladen wird, wenn das Formular geladen wird. Ich versuche, diese Schaltfläche zur Textdatei hinzuzufügen. Es besagt, dass die Datei noch geöffnet ist. Gibt es eine Möglichkeit, dass ich den Pfad der gewählten Datei zur Liste hinzufügen kann, auch wenn sie geöffnet ist. Ich bin mir nicht sicher, wie ich das schließe. Mir wurde gesagt, dass es das automatisch macht.Anwendung meldet immer noch Datei ist offen und Anzeige Fehler

private void shortcutManagerForm_Load(object sender, EventArgs e) 
{ 
    if (File.Exists("Shortcut_Items.txt")) 
    { 
    shortcutListBox.DataSource = File.ReadAllLines("Shortcut_Items.txt"); 
    } 
} 

OpenFileDialog openFileDialog1 = new OpenFileDialog(); 

if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK) 
{ 
    string tempPath = ""; 
    tempPath = openFileDialog1.FileName; 
    StreamWriter file2 = new StreamWriter("Shortcut_Items.txt", true); 
    string path = "Shortcut_Items.txt"; 
    string appendText = Environment.NewLine + tempPath + Environment.NewLine; 
    File.AppendAllText(path, appendText); 
    MessageBox.Show("Shortcut added"); 
} 
+2

Warum öffnen Sie ein Datei-Handle für die Variable 'file2' und verwenden es dann nie? Sie könnten dieses Objekt entsorgen, aber Sie scheinen es überhaupt nicht zu brauchen. – David

Antwort

2
StreamWriter file2 = new StreamWriter("Shortcut_Items.txt", true); 
// ... 
File.AppendAllText(path, appendText); 

Sicher, die Datei zu öffnen. Sie erstellen einen StreamWriter, der diese Datei zum Schreiben öffnet. Dann - völlig unabhängig von diesem StreamWriter - öffnen Sie die Datei zum Schreiben wieder mit File.AppendAllText.

Beseitigen Sie Ihren StreamWriter-Code vollständig. Wenn Sie File.AppendAllText verwenden, benötigen Sie nicht ein StreamWriter - File.AppendAllText ist in sich abgeschlossen.

1

Du ABSCHLUSS nie die Datei. Ich würde die Anweisung 'using' empfehlen, die Ihre Datei automatisch für Sie schließt.

diesen Teil des Codes ersetzen:

StreamWriter file2 = new StreamWriter("Shortcut_Items.txt", true); 
string path = "Shortcut_Items.txt"; 
string appendText = Environment.NewLine + tempPath + Environment.NewLine; 
File.AppendAllText(path, appendText); 

mit diesem:

using(StreamWriter file2 = new StreamWriter("Shortcut_Items.txt", true)) 
{ 
    //Do whatever you're going to do with the file 
} 

string path = "Shortcut_Items.txt"; 
string appendText = Environment.NewLine + tempPath + Environment.NewLine; 
File.AppendAllText(path, appendText); 
+1

Warum file2 verwenden, wenn Sie es auch nicht verwenden werden? – LarsTech

+1

Und wenn der 'StreamWriter' die Datei sperrt, dann wird 'File.AppendAllText' auch mit diesem Code immer noch fehlschlagen, Sie müssen ihn außerhalb des' using' verschieben. – Quantic

+0

Ok, ich habe meine Antwort aktualisiert. Ich gehe davon aus, dass die Person, die die ursprüngliche Frage gestellt hat, einen Teil ihres Codes der Kürze halber entfernt hat ... – Curtis

Verwandte Themen