Wednesday, 11 September 2013

node.js fs.writeFile Not Completely Overwriting File

node.js fs.writeFile Not Completely Overwriting File

I have a file that is of length X and it is being overwritten by a string
that is of length X-Y. Problem is, that the file is still retaining the
information past X-Y so that it is as long as the first longer file. So
here is my test output that is giving me fits:
File started as:
{
"sOption1": "String",
"nOption2": 23.5,
"sOption3": "String",
"bOption3B": true,
"anOption4": [
5,
6,
7
],
"sNewString": "FruitSalad",
"bNewBoolean": false,
"iNewNumber": 14.2,
"anNewArray": [
1,
2,
3,
4,
5,
6,
7,
8,
9,
10
],
"oNewObject": {
"bToBeOrNotToBe": true,
"sFinishQuote": "That is the question"
}
}
Changed the data and file Ended as:
{
"sOption1": "String",
"nOption2": 23.5,
"sOption3": "String",
"bOption3B": true,
"anOption4": [
5,
6,
7
],
"sNewString": "YummyYummy",
"bNewBoolean": true,
"iNewNumber": 2.14,
"anNewArray": [
10,
9
],
"oNewObject": {
"bToBeOrNotToBe": false,
"sNewQuote": "To die, to sleep, no more"
}
} "bToBeOrNotToBe": true,
"sFinishQuote": "That is the question"
}
}}
See the garbage on the end of the object? It's left over from the previous
file, even though I wrote it out with the following code:
//stringify the object, and make it pretty with options null, 4
sNewFile = JSON.stringify(this.oPersistentUserOptions, null, 4);
//write to the file, parameter is immediately in object memory though
fs.writeFile(PERSISTENT_USER_SELECTED_OPTIONS_FILENAME, sNewFile,
function(err){console.log(err);});
I have checked to make sure that the sNewFile variable is the correct
length, and it is. I also have paused as long as 6 seconds between
subsequent writes out to disk, so I can't see how this could be a timing
issue.
If I use writeFileSync the problem goes away, but I really don't have the
option to do synchronous writes for this application as I'm timing
critical and don't want to have to slow down to write to the disk.
I'm on node.js 0.8.21, but it doesn't look like the interface has changed
any for fs between that and the up to date version.
Anyone else hit anything like this? This is giving me fits. . .

No comments:

Post a Comment