Frage

Guten Morgen alle,

Ich bin mit einem Verfahren in meiner C # -Code ein paar Probleme, die einen Datagridview ermöglichen sollten, in eine TXT-Datei gespeichert werden.

Der Code ist wie folgt:

private void saveToTxt_Btn_Click(object sender, EventArgs e)
    {
        filenameText.Text = serviceDataGrid.Rows.Count.ToString();
        //string toOutFile = @"C:\" + filenameText.Text+".txt";
        string toOutFile = @"C:\hello.txt";

        FileStream toFile = new FileStream(toOutFile, FileMode.Create);

        TextWriter toText = new StreamWriter(toOutFile);

        int count = serviceDataGrid.Rows.Count;

        toText.WriteLine("\t\t" + filenameText.Text);
        toText.WriteLine("\t\t" + directoryText.Text+"\n\n");

        for (int row = 0; row < count-1; row++)
        {
            toText.WriteLine(serviceDataGrid.Rows[row].Cells[0].Value.ToString());
        }
        toText.Close();
        toFile.Close();
    }

Die folgende Zeile gibt den Fehler:

TextWriter toText = new StreamWriter(toOutFile);
  

IOException unhandled wurde.   Der Prozess kann nicht auf die Datei zugreifen ‚C: \ hello.txt‘., Weil sie von einem anderen Prozess verwendet wird

Ich bin mir nicht ganz sicher, was das Problem ist, aber es wäre es vorschlägt, sind Konflikte zwischen Filestream und Textwriter.

Schuppen Kann jemand irgendein Licht auf das? Grüße

War es hilfreich?

Lösung

Sie öffnen es zweimal; verlieren alle toFile Sachen vollständig und Verwendung using um toText:

    using(TextWriter toText = File.CreateText(toOutFile))
    {
        toText.WriteLine("\t\t" + filenameText.Text);
        toText.WriteLine("\t\t" + directoryText.Text+"\n\n");

        foreach(DataGridViewRow row in serviceDataGrid.Rows)
        {
            toText.WriteLine(row.Cells[0].Value.ToString());
        }
    }

Auch; tun Sie wirklich bedeuten WriteLine(... + "\n\n")?

Andere Tipps

Wenn Sie mit Zeile

TextWriter toText = new StreamWriter(toOutFile);

die folgende Zeile nicht erforderlich ist, da Streamwriter (string filePath) Konstruktor wird eine Datei erstellen, wenn es nicht vorhanden ist.

FileStream toFile = new FileStream(toOutFile, FileMode.Create);

Und Marc ist richtig, Sie bereits Datei geöffnet haben einmal in anderen Instanzvariable, man kann wieder geöffnet werden.

Ich habe übersehen, dass Sie den Schriftsteller mit dem Dateinamen öffnen. Ich dachte, du hast Textwriter toText = new Stream (toFile);

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top