2016-07-12 13 views
1

Ich habe eine Datei, die manchmal \00 Nullzeichen darin enthält. Also muss ich es reparieren.node's fs.writeFile überschreibt keinen vorherigen Inhalt

Das ist der Grund, warum ich es lese, die ungültigen Zeichen entferne und es wieder schreibe. ABER, fs.writeFile überschreibt nicht seinen vorherigen Inhalt. Die neuen Inhalte werden angehängt, was ich nicht möchte.

Ist das, weil mein Schreibcode im Lesecode ist?

fs.readFile('./' + file, function (err, data) { 
    if (err) { 
     console.error(err); 
     return; 
    } 
    var str = data.toString(); 
    var repaired = str.slice(0, str.indexOf('\00')) + str.slice(str.lastIndexOf('\00') + 1, str.length); 
    //console.log(repaired); 
    fs.writeFile('./' + file, repaired, function (err) { 
     if (err) 
      console.error(err); 
    }); 
}); 

Ich habe auch versucht {flag:'w'} mit (was ich denke, fs.writeFile bereits standardmäßig haben kann)

+0

Wenn ich nicht falsch liege, wird nur das letzte Zeichen der Datei fehlen. Können Sie das bitte überprüfen? – thefourtheye

+0

@thefourtheye Ja, ich denke es ist ein '\ n' und es wird entfernt –

+0

Dann hatte ich Recht. Die Zeichenfolge, nach der '\ 00' gesucht wird, befindet sich nicht in der Datei. – thefourtheye

Antwort

1

Dank @thefourtheye für den Hinweis mich auf mich zu richtigen Richtung.

Da es keine \00 Zeichen in der Datei i mit dem Testen wurde, die str.indexOf('\00') und wurden die ganze Datei bekommen, und wieder str.slice(str.lastIndexOf('\00') wurde die gesamte Datei zu bekommen. Deshalb dachte ich

Mit Ersetzen Funktion hat den Job.

var repaired = str.replace(/\00/g,'');