2016-08-09 5 views
0

Ich habe ein Skript, das Daten von einer API in einige Dateien schreibt. Ich habe ein Objekt das die Datei-Deskriptoren für jede Datei enthält:fs.readFileSync gibt immer leere Zeichenfolge zurück

var csvFds = { 
    'file1' : null, 
    'file2' : null, 
    'file3' : null, 
    'file4' : null 
}; 

for (var file in csvFds) { 

    var dirPath = __dirname + '/files/' + file; 

    try { 
     fs.statSync(dirPath); 
    } 
    catch (e) { 
     mkdirp.sync(dirPath, {mode: 0755}); 
    } 

    csvFds[file] = fs.openSync(dirPath + '/' + moment().format("YYYY-MM-DDTHH:mm:ss[Z]") + '.csv', 'a+'); 
} 

Dann habe ich einige Code, der fs.write verwendet Linien csv in die Datei in Chargen zu schreiben. Dieser Teil funktioniert gut. Ich habe gut ausgebildete CSV-Dateien. Jetzt muss ich den Inhalt der gesamten Datei als String lesen. Dies ist, wie ich es versuche:

Aber aus irgendeinem Grund bekomme ich immer eine leere Zeichenfolge. Ich habe bestätigt, dass fs.readFileSync tatsächlich einen Puffer zurückgibt, indem ich console.log verwende und die Methode toString() ablege.

Ich bin wirklich fest auf dieser so jede Hilfe wird sehr geschätzt werden. Danke im Voraus. Hier einige zusätzliche Informationen in Bezug auf meine Knoten Version und OS:

$ node -v 
v6.2.3-pre 

$ uname -a 
Darwin i-2.local 14.5.0 Darwin Kernel Version 14.5.0: Thu Jun 16 19:58:21 PDT 2016; root:xnu-2782.50.4~1/RELEASE_X86_64 x86_64 
+0

Wenn Sie die 'readFileSync'-Methode codieren, erhalten Sie eine Zeichenfolge anstelle eines' Buffer' – mic4ael

Antwort

0

Try readFileSync wie diese readFileSync(csvFds['file1'], 'utf-8') zu nennen. Es sollte eine Zeichenfolge zurückgeben. Oder Sie können das Argument weglassen und dann die Codierung bereitstellen, wenn Sie das Verfahren toString aufrufen, z. readFileSync(csvFds['file1']).toString('utf-8')

+0

Hey Michael. Ich hatte beide zuvor schon einmal probiert und habe es einfach nochmal gemacht. Aber ich bekomme immer noch eine leere Saite. Es muss eine Möglichkeit geben, Informationen über die Dateideskriptoren oder Puffer zu erhalten, um dies zu debuggen. Ich bin dabei, die Knotenversion zu wechseln. –

+0

Sind Sie sicher, dass Ihr csvFds-Wörterbuch korrekte Daten enthält? Können Sie anzeigen, was csvFds nach dem Ende der for-Schleife enthält? – mic4ael

+0

es ist eine wilde Vermutung, aber dieses Stück Code 'now.getTime()' mir etwas verdächtig erscheint – mic4ael

Verwandte Themen