2016-11-14 4 views
1

Ich spiele mit Node.js fs.writeFile() Flags, um die richtige Datei für mein Problem zu finden: Ich möchte den Inhalt einer Datei ersetzen, sondern einen Fehler, wenn die Datei ist nicht vorhanden.Dateiinhalt ersetzen, ohne eine neue Datei mit Node.js zu erstellen

Mein erster Versuch war mit r+ aber ich habe Probleme, wenn der neue Inhalt kürzer als die alte ist:

fs.writeFileSync('test', '11111111111'); 
> 111111111111 
fs.writeFileSync('test', '22', {flag: 'r+'}) 
> 221111111111 

das Flag lösen das Problem (geben 22) entfernen, aber eine neue Datei, wenn test doesn erstellen Ich existiere nicht.

Ist es mit einer Flagge machbar oder muss ich Datei Existenz vor (nicht sehr gefunden davon) erkennen?

Antwort

2

Sie können dies nicht in einem einzigen Schritt tun: Öffnen einer Datei zum Schreiben erstellt die Datei, wenn sie nicht existiert, während das Öffnen der Datei mit r+ Modus zeigt das Problem, das Sie erwähnen.

Ich sehe zwei Möglichkeiten:

  1. Test auf Existenz fs.stat() verwenden, dann fs.writeFile() in w Modus.
  2. Öffnen Sie die Datei in r+ Modus, schreiben Sie darauf, dann fs.ftruncate() die Datei auf die gewünschte Größe.

Ich empfehle den ersten Ansatz. Der Code wird einfacher zu lesen und zu begründen.

+0

Ich wurde immer gesagt, die Datei zu testen, bevor ein Anti-Muster ist, weil es den Dateistatus nicht garantiert, wenn Sie schreiben. Ich habe vielleicht gleichzeitigen Zugriff auf diese Datei, also ist nicht die zweite besser? Danke – NorTicUs

+0

Da ich die Datei überschreiben möchte, fand ich heraus, die beste Methode ist in der Tat löschen Sie es, achten Sie auf Fehler (wenn es nicht existiert), dann schreiben Sie es mit Standard-Flag. Vielen Dank – NorTicUs

Verwandte Themen