webentwicklung-frage-antwort-db.com.de

Wie überschreiben Sie eine Datei, wenn sie bereits existiert?

Ich mache einen Musikplayer. Es hat 2 Formen; Einer ist der Hauptbereich, in dem Sie Musik spielen. Das zweite Formular hat eine CheckedListBox, in der Sie die gewünschten MP3s auswählen können. Wenn ich auf eine Schaltfläche klicke, wird die Auswahl in einer TXT-Datei gespeichert, sodass ich auf sie im ersten Formular zugreifen kann die Pfade für den Musik-Player, um die Dateien zu finden.

Dies ist der Code in meinem zweiten Formular, in dem ich die ausgewählten Songs in TXT-Dateien speichere.

private void selectbtn_Click(object sender, EventArgs e)
{
    if (File.Exists(@"C:\Users\Me\Desktop\JAM_MACHINE\JAMS\record.txt"))
    {
       File.WriteAllText(@"C:\Users\Me\Desktop\JAM_MACHINE\JAMS\record.txt", String.Empty);
    }

    string[] checkedtitles = new string[checkedListBox1.CheckedItems.Count]; 

    for (int ii = 0; ii < checkedListBox1.CheckedItems.Count; ii++)
    {
        checkedtitles[ii] = checkedListBox1.CheckedItems[ii].ToString();
    }
    string selectedSongs = String.Join(Environment.NewLine, checkedtitles); 

    songRecord.writeRecord(selectedSongs); //I initialised the class containing streamwriter/reader, and called it songRecord
    this.Close();   
}

Das Problem ist, wenn ich das Programm schließe und wieder öffne, kann ich die TXT-Datei nicht neu schreiben/löschen. Es fügt sich einfach in die vorhandene Datei ein. Gibt es etwas, was ich nicht richtig mache?

Hier sind meine Streamreader/Writer-Codes. Ich bin mir ziemlich sicher, dass ich es auch nach dem Laufen geschlossen habe, aber vielleicht kann jemand herausfinden, was falsch ist:

namespace songss
{
    class DataRecord
    {
    public void writeRecord(string line)
    {
        StreamWriter sw = null;
        try
        {
            sw = new StreamWriter(@"C:\Users\Me\Desktop\JAM_MACHINE\record.txt", true);
            sw.WriteLine(line);
        }
        catch (FileNotFoundException)
        {
            Console.WriteLine("Error: File not found.");
        }
        catch (IOException)
        {
            Console.WriteLine("Error: IO");
        }
        catch(Exception)
        {
            throw;
        }
        finally
        {
            if (sw != null)
                sw.Close();
        }
        }

 public void readRecord()
    {
        StreamReader sr = null;
        string myInputline;
        try
        {
            sr = new StreamReader(@"C:\Users\Me\Desktop\JAM_MACHINE\record.txt");
            while ((myInputline = sr.ReadLine()) != null) ; //readline reads whole line
            Console.WriteLine(myInputline);
        }
        catch (FileNotFoundException)
        {
            Console.WriteLine("Error: File not found");
        }
        catch(IOException)
        {
            Console.WriteLine("Error: IO");
        }
        catch (Exception)
        {
            throw;
        }
        finally
        {
            if (sr != null)
                sr.Close();
        }
    }
    }
    }
7
Manny

WriteAllText

File.WriteAllText sollte tun, was Sie wollen.

Erstellt eine neue Datei, schreibt die angegebene Zeichenfolge in die Datei und anschließend schließt die Datei Wenn die Zieldatei bereits vorhanden ist, wird sie überschrieben.

StreamWriter

Die StreamWriter-Klasse hat auch eine Option zum Überschreiben/Anhängen:

Initialisiert eine neue Instanz der StreamWriter-Klasse für das angegebene Datei mit der Standardkodierung und Puffergröße. Wenn die Datei existiert, kann es entweder überschrieben oder angehängt werden.

public StreamWriter(
    string path,
    bool append
)

Beispiel:

using (StreamWriter writer = new StreamWriter("test.txt", false)){ 
    writer.Write(textToAdd);
}

Wenn Sie Ihren Code betrachten, übergeben Sie true, was Anhängen bedeutet.

sw = new StreamWriter(@"C:\Users\Me\Desktop\JAM_MACHINE\record.txt", true);
sw.WriteLine(line);

.NET Compact Framework

Wenn Sie auf einer .NET-Version stecken, die nichts unterstützt (z. B. kompaktes Framework), können Sie WriteAllText auch selbst implementieren:

static void WriteAllText(string path, string txt) {
    var bytes = Encoding.UTF8.GetBytes(txt);
    using (var f = File.Open(path, FileMode.Create)) {
        f.Write(bytes, 0, bytes.Length);
    }
}
16
Nicholas

Verweisen Sie auf diesen Link für von Microsoft bereitgestellte Lösungen: ( https://msdn.Microsoft.com/en-us/library/system.io.file.appendtext(v=vs.110).aspx )

Hier ist der Code zum Anhängen der vorhandenen Datei:

StreamWriter writer = File.AppendText(Filepath);
writer.WriteLine(content);
writer.Close();
0
AutomationNerd

Benutze das

File.WriteAllText(@"C:\Users\Me\Desktop\JAM_MACHINE\JAMS\record.txt", line);

anstatt 

sw = new StreamWriter(@"C:\Users\Me\Desktop\JAM_MACHINE\record.txt", true);
            sw.WriteLine(line);