node Dateilesen
effel
- node
Hallo,
so habe ich den gesamten Inhalt einer Datei gelesen:
Datei öffnen:
fs.open("DR_ARB_DATX.txt", 'r+', function (err, fd) {
if (err) throw err;
console.log("DR_ARB_DATX.txt geoeffnet");
DR_DATX=fd
console.log("DR_DATX ",DR_DATX)
})
arg1 enthält DR_DATX
, also 3
inhalt = fs.readFileSync(arg1);
console.log("SATZ_ANZ ",Math.round(inhalt.length/arg2))
alles hat bestens funktioniert!
Mein Problem:
Nach dem Lesen steht der Zähler auf Ende der Datei.
bei erneuten Lesen ist
inhalt =""
Frage: Wie erreiche ich, das der Zähler wieder auf Anfang der Datei
gestellt wird
Danke und
freundlichen Gruß
Effel
Hallo effel,
Mein Problem: Nach dem Lesen steht der Zähler auf Ende der Datei.
Woher hast Du diese Hypothese? Meine ist: Es gibt den Zähler nicht mehr. Denn readFileSync öffnet die Datei, liest sie ein und macht sie wieder zu. Alles in einem Rutsch.
Ein fs.open ist für fs.readFileSync irrelevant. Und es ist asynchron, d.h. wenn Du die beiden Codeteile direkt nacheinander ausführst, ist der fs.open noch gar nicht durch, wenn readFileSync losläuft. Die Irrelevanz erkennst Du auch darin, dass readFileSync vom Inhalt von fd gar keinen Gebrauch macht.
Wenn die Datei nicht existiert, fliegt aus readFileSync ein Error dieser Art:
Error: ENOENT: no such file or directory
Wenn also beim zweiten Lesen ein leerer Inhalt herauskommt, hat das andere Gründe als Du vermutest. Hast Du mal den Inhalt von arg1 bei beiden Leseversuchen ausgegeben? Hat sich vielleicht das Verzeichnis geändert? Das kriegst Du mit process.cwd()
heraus.
Rolf
@Rolf
es funktioniert auch mit "fd". Wenn nach Beenden auch intern die Datei geschlossen wird ( was ich nicht wußte), dann wird fd gelöscht und beim 2.Aufruf ist in fd keine Datei enthalten. Das war der Fehler. Also Danke!Es hat mir geholfen!
noch etwas: An anderer Stelle lese ich einzelne Datenblöcke mit fs.readSync(fd1, buffer,0,buffer.length,(arg1[1][0][1]-1)*Blocklen) keine Probleme dabei,es funktioniert
dazu die Frage: Gibt es auch so etwas auch fürs Schreiben, z.B: fs.writeSync(fd1, buffer,0,buffer.length,(arg1[1][0][1]-1)*Blocklen) um Blöcke innerhalb der Datei zu überschreiben? wenn ja- mit Dokumentation?
Für das Anhängen benutze ich: fs.appendFileSync(DR_DATX,zk_sp, function (err) { if (err) throw err; console.log('in '+fd+' gespeichert!'); }); das ist ohne Probleme.
mit freundl.Gruß
Effel
Hallo effel,
es funktioniert auch mit "fd".
Ah, ja. Damit habe ich nicht getestet. Man sollte annehmen, dass er dann die Datei nicht schließt, sondern die Verantwortung dem überträgt, der das FileHandle beschafft hat.
Aber schau Dir mal fs.readSync an. Da kannst Du als vierten Parameter die Position angeben, ab der gelesen werden soll. Der entscheidende Punkt: Die Position in der Datei bleibt dabei unverändert. Du kannst damit also etwas bauen, was fseek() in anderen Sprachen nachempfindet.
Lies ein Byte ab Position 0, und probier dann nochmal den readFileSync.
Rolf