由于大量不同的错误,我一直在撞墙。这就是我尝试使用的代码:
fs.readFile("balance.txt", function (err, data) //At the beginning of the script (checked, it works)
{
if (err) throw err;
balance=JSON.parse(data);;
});
fs.readFile("pick.txt", function (err, data)
{
if (err) throw err;
pick=JSON.parse(data);;
});
/*....
.... balance and pick are modified
....*/
if (shutdown)
{
fs.writeFile("balance2.txt", JSON.stringify(balance));
fs.writeFile("pick2.txt", JSON.stringify(pick));
process.exit(0);
}
在脚本结束时,文件没有被修改过一点点。然后我在这个网站上发现文件同时被打开了2次,或类似的东西,所以我尝试了这个:
var balance, pick;
var stream = fs.createReadStream("balance.txt");
stream.on("readable", function()
{
balance = JSON.parse(stream.read());
});
var stream2 = fs.createReadStream("pick.txt");
stream2.on("readable", function()
{
pick = JSON.parse(stream2.read());
});
/****
****/
fs.unlink("pick.txt");
fs.unlink("balance.txt");
var stream = fs.createWriteStream("balance.txt", {flags: 'w'});
var stream2 = fs.createWriteStream("pick.txt", {flags: 'w'});
stream.write(JSON.stringify(balance));
stream2.write(JSON.stringify(pick));
process.exit(0);
但是,这一次,两个文件都是空的......我知道我应该抓错,但我只是看不出问题出在哪里。我不介意将2个对象存储在同一个文件中,如果这有帮助的话。除此之外,我从来没有在我的生活中做过任何javascript,所以,如果你知道这里失败了,请给我一个简单的解释。
答案 0 :(得分:1)
我认为您想要做的是使用readFileSync而不是使用readFile来读取您的文件,因为您需要在程序中执行任何其他操作之前阅读它们(http://nodejs.org/api/fs.html#fs_fs_readfilesync_filename_options)。
这将确保您在执行任何其余代码之前已经读取了这两个文件。
让你喜欢的代码执行此操作:
try
{
balance = JSON.parse(fs.readFileSync("balance.txt"));
pick = JSON.parse(fs.readFileSync("pick.txt"));
}
catch(err)
{ throw err; }
我认为通过这样做,您将获得所需的功能。
注意,您将无法以与readFile相同的方式检查错误。相反,您需要在try catch中包装每个调用,或者在每个操作之前使用existsSync,以确保您没有尝试读取不存在的文件。
How to capture no file for fs.readFileSync()?
此外,您在写入时遇到同样的问题。您正在启动异步写入,然后立即调用process.exit(0)。更好的方法是以异步方式顺序写入它们,然后退出或按顺序顺序写入它们然后退出。
异步选项:
if (shutdown)
{
fs.writeFile("balance2.txt", JSON.stringify(balance), function(err){
fs.writeFile("pick2.txt", JSON.stringify(pick), function(err){
process.exit(0);
});
});
}
同步选项:
if (shutdown)
{
fs.writeFileSync("balance2.txt", JSON.stringify(balance));
fs.writeFileSync("pick2.txt", JSON.stringify(pick));
process.exit(0);
}