2016-04-17 4 views
1

geschrieben. Ich kann keine Lösung für dieses Problem finden. Unter Verwendung von Knoten fs erstelle ich eine Datei mit createWriteStream, schreibe Daten in sie und versuche dann, sie zu löschen, aber sie kann nicht gelöscht werden, während der Knoten offen ist. Node.js - Die mit createWriteStream erstellte Datei kann nicht gelöscht werden und wurde in

Im Folgenden ist der Code, den ich für diesen Prozess verwende:

var file = fs.createWriteStream("test.txt", {flags: "a"); 
file.write(new Buffer(1048576)); 

Die Datei mit Erfolg und die 1MB leerer Daten erstellt wird, wird es richtig geschrieben. Das Problem ist, wenn ich versuche, die Datei fs.unlink oder löschen Sie es manuell (Windows - Datei löschen), verschwindet es aus dem Ordner, aber sobald ich den Ordner aktualisieren die Datei ist immer noch da, es ist immer da, bis der Knoten geschlossen ist. Ich denke, dass es zum Löschen markiert wird, sobald es nicht mehr von Node verwendet wird.

Ich habe versucht, die Datei zu schließen, nachdem der Prozess mit file.close(), file.end(), file.emit("close"), file.emit("end") und ein paar andere, aber immer noch die Datei nicht löschen konnte.

Wie kann ich die Datei "beenden", damit sie bei Bedarf gelöscht werden kann? Ich dachte, es würde sich nach dem Schreiben schließen.

Antwort

0

Alas nach verschiedenen Code-Kombinationen zu experimentieren habe ich es geschafft, einen Weg zu finden, richtig um die Datei zu schließen, wenn es nicht von selbst geschlossen wird, wie es funktioniert, wenn Sie Rohr Stream-Daten in die Datei von HTTP (s) Anfragen bekommen.

Der richtige Weg, um die Datei mit den folgenden

fs.close(fd); 

Der fd ist der Dateideskriptor und dauerte eine Weile, zu verstehen, wo es liegt zu schließen. Ich versuchte, die file von meinem Codebeispiel verwenden, aber es gab den Fehler

fd must be a file descriptor

Schließlich ich in der Datei Dateideskriptors gestolpert, es ist nur eine Zahl. Sie finden es in der Dateireferenz, die Sie haben. In meinem Fall war alles, was ich tun musste,

fs.close(file.fd); 

Und fertig, jetzt kann die Datei gelöscht werden.

Ein Rückruf kann für das zweite Argument verwendet werden, wenn jemand will: https://nodejs.org/api/fs.html#fs_fs_close_fd_callback

1

Um zu wissen, wann der zugrunde liegende Dateideskriptor geschlossen wurde, müssen Sie nach dem close Ereignis abhören, nachdem .end() aufgerufen wurde. Zum Beispiel:

var file = fs.createWriteStream("test.txt", {flags: "a"); 
file.on('close', function() { 
    console.log('fd closed'); 
}); 
file.end(new Buffer(1048576)); 
+0

bereits versucht, dass es nicht funktioniert hat. Glücklicherweise konnte ich die Lösung für mein Problem finden und habe die Antwort bereits gepostet. Danke für die Hilfe trotzdem. – Shadow

Verwandte Themen