2016-05-06 19 views
0

Ich habe eine Methode, die den Text aus einem Textfeld in eine TXT-Datei speichert, aber ich bekomme eine System.IO.IOException Fehler jedes Mal, wenn ich aus dem SaveFileDialog zurück.C# - System.IO.IOException

static OpenFileDialog ofd = new OpenFileDialog(); 
    static SaveFileDialog sfd = new SaveFileDialog(); 
    static String cp; 

    private void SaveClass() { 
     sfd.DefaultExt = "txt"; 
     sfd.Filter = "Text Files | *.txt"; 
     if (sfd.ShowDialog() == DialogResult.OK) { 
      cp = sfd.FileName; 
      File.Create(cp); 

      File.WriteAllLines(@cp, StudentTextBox.Text.Split(new String[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries)); 

     } 
    } 

Visual Studio hebt den Code, der mit „File.WriteAllLines“ beginnt und sagt, das ist, wo ich den Fehler. Vielen Dank.

Genaue Fehlermeldung:

Eine nicht behandelte Ausnahme des Typs 'System.IO.IOException' in mscorlib.dll aufgetreten

Zusätzliche Informationen: Der Prozess kann nicht die Datei ‚C zugreifen: \ Benutzer \ ktfjulien \ Documents \ poop.txt ', weil es von einem anderen Prozess verwendet wird.

EDIT: Vielen Dank, ich bekomme nicht mehr die Fehlermeldung, aber alles, was ich in das Textfeld speichern wird auf eine Zeile geschrieben, unabhängig davon, ob der Text durch neue Zeilen oder nicht begrenzt ist.

+0

Und Fehlermeldung? –

Antwort

3

Sie müssen File.Create(cp); nicht in eine Datei schreiben. Dies ist die Ursache des Fehlers. Stattdessen direkt tun:

cp = sfd.FileName; 
FileStream fs = File.OpenWrite(cp); 

Und wenn Sie die StreamWriter statt FileStream verwenden möchten, verwenden Sie die FileStream als Eingang für Ihre StreamWriter

StreamWriter sw = new StreamWriter(fs); 

Oder könnten Sie auch File.WriteAllLines wie Sie direkt verwenden show - verwenden Sie nicht die File.Create:

if (sfd.ShowDialog() == DialogResult.OK) { 
    cp = sfd.FileName; 
    //File.Create(cp); //remove this 

    File.WriteAllLines(@cp, StudentTextBox.Text.Split(new String[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries)); 

} 
1

Wenn Sie erstellen Datei mit File.Create() wird diese Datei bereits von File.Create() Sie benötigen verwendet diese Datei schließen vor dem Gebrauch einen anderen Ort so vor dem Schreiben Text in die Datei schließen Datei writer

var file = File.Create(cp); 
file.Close(); 

komplette Arbeitslösung

static OpenFileDialog ofd = new OpenFileDialog(); 
static SaveFileDialog sfd = new SaveFileDialog(); 
static String cp; 
private void SaveClass() 
{ 
    sfd.DefaultExt = "txt"; 
    sfd.Filter = "Text Files | *.txt"; 
    if (sfd.ShowDialog() == DialogResult.OK) 
    { 
     cp = sfd.FileName; 
     var file = File.Create(cp); 
     file.Close(); 

     File.WriteAllLines(@cp, StudentTextBox.Text.Split(new String[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries)); 

    } 
} 
1

Sie haben keine Notwendigkeit, Erstellen Sie die Datei, File.WriteAllLines wird es für Sie tun (oder löschen Sie die Datei, wenn sie existiert):