Wie kann ich den Inhalt einer Datei löschen?

79

Ich muss den Inhalt einer bestimmten Datei bei jedem Start der Anwendungen löschen. Wie mache ich es?

Olive
quelle

Antworten:

129

Sie können die File.WriteAllText- Methode verwenden.

System.IO.File.WriteAllText(@"Path/foo.bar",string.Empty);
Der Scrum Meister
quelle
Ich habe eine Hardlink-Datei und benutze File.WriteAllText, es scheint, als würde dies manchmal (?) Die Datei löschen, da die Hardlinks nicht aktualisiert werden.
Ciantic
Ich empfehle Ihnen, dies nicht zu tun, wenn ein anderer Vorgang direkt nach diesem Vorgang auf die Datei zugreift. Ich hatte ein Problem, bei dem die Datei nicht geschlossen wurde. Schreiben Sie nach dieser Codezeile und Ursache IO exceptions of file is in use, daher empfehle ich Ihnen, sie manuell über den Dateistream zu verarbeiten
deadManN
80

Dies habe ich getan, um den Inhalt der Datei zu löschen, ohne eine neue Datei zu erstellen, da ich nicht wollte, dass die Datei einen neuen Erstellungszeitpunkt anzeigt, selbst wenn die Anwendung gerade ihren Inhalt aktualisiert hat.

FileStream fileStream = File.Open(<path>, FileMode.Open);

/* 
 * Set the length of filestream to 0 and flush it to the physical file.
 *
 * Flushing the stream is important because this ensures that
 * the changes to the stream trickle down to the physical file.
 * 
 */
fileStream.SetLength(0);
fileStream.Close(); // This flushes the content, too.
Abhay Jain
quelle
Ich habe .NET 3.5 verwendet, nur für den Fall, dass Sie die Version wissen möchten.
Abhay Jain
Olive, wenn es Ihre Frage beantwortet, würden Sie es bitte als Antwort markieren. Wenn die vorgeschlagene Lösung in Ihrem Fall jedoch nicht funktioniert, teilen Sie uns dies bitte auch dann mit.
Abhay Jain
5
+1 Nur so können Sie zuerst eine Dateisperre erwerben, die Dateiattribute sicher überprüfen und schließlich den Inhalt löschen.
Mafu
1
Dies ist genau das, was ich selbst brauchte ... Ich brauche einen Dienst, der mit einer Anwendung kommuniziert, um einfache zeilenweise Nachrichten an einen Benutzer zu senden. Dadurch kann ich meine Dateisperre beibehalten und die Nachrichten löschen, um die Dienst-App zu verhindern vom Einfügen und versehentlichen Löschen von Nachrichten oder vom Duplizieren von Nachrichten.
phillk6751
2
Wäre es nicht ratsam, den Dateistream in einem using-Block zu erstellen? Das würde den Stream auch automatisch schließen.
Wuolennaj
11

Verwenden FileMode.TruncateSie diese Option jedes Mal, wenn Sie die Datei erstellen. Platzieren Sie auch das File.CreateInnere a try catch.

Sajoshi
quelle
2

Der einfachste Weg, dies zu tun, besteht darin, die Datei über Ihre Anwendung zu löschen und eine neue mit demselben Namen zu erstellen. Noch einfacher ist es, wenn Ihre Anwendung sie mit einer neuen Datei überschreibt.

Kartikya
quelle
1
Es kann zu Problemen kommen, wenn Sie versuchen, die Datei kurz nach dem Löschen zu erstellen. Manchmal kann das Betriebssystem keine Datei erstellen, da es "denkt", dass die Datei noch vorhanden ist.
Dmitrii Lobanov
@Dmitry Lobanov - [Ich weiß, das ist ein alter Thread]. Ich akzeptiere nicht, dass das Betriebssystem manchmal denkt, dass eine Datei noch existiert, es sei denn, es gibt einen guten Grund. Es wäre ein sehr schlechtes Betriebssystem, wenn es so wäre. Viel wahrscheinlicher ist, dass für etwas noch ein Handle für die vorhandene Datei geöffnet ist. Es könnte sogar Ihre eigene Software sein, wenn Sie beim Schließen von Dateien nicht vorsichtig sind (indem Sie beispielsweise "using" verwenden, um die Entsorgung sicherzustellen). Könnte auch das Antivirus sein. Stimmen Sie jedoch Ihrer Schlussfolgerung zu. Ich denke, FileMode.Truncate ist der richtige Weg.
Steve Kidd
2

Der einfachste Weg ist:

File.WriteAllText(path, string.Empty)

Ich empfehle jedoch die Verwendung, FileStreamda die erste Lösung werfen kannUnauthorizedAccessException

using(FileStream fs = File.Open(path,FileMode.OpenOrCreate, FileAccess.ReadWrite))
{
     lock(fs)
     {
          fs.SetLength(0);
     }
}
Mohammad Albay
quelle
1

Versuchen Sie es mit so etwas

File.Create

Erstellt oder überschreibt eine Datei im angegebenen Pfad.

Adriaan Stander
quelle
Keine gute Idee für die gestellte Frage: Entfernt die bereits in der Datei enthaltenen Daten nicht - sie überschreiben sie nur auf die Länge der neuen Daten. Wenn also alte Daten> neue Daten sind, erhalten Sie eine Mischung aus beiden.
Namford