node的fs.writeFile不会覆盖之前的内容
node's fs.writeFile does not overwrite previous contents
我有一个文件,有时会在其中包含 [=12=]
个空字符。所以我需要修复它。
这就是我阅读它的原因,删除无效字符并重新写入。但是,fs.writeFile
并没有覆盖它以前的内容。新内容被追加,这不是我想要的。
是不是因为我的写码在读码里面?
fs.readFile('./' + file, function (err, data) {
if (err) {
console.error(err);
return;
}
var str = data.toString();
var repaired = str.slice(0, str.indexOf('[=11=]')) + str.slice(str.lastIndexOf('[=11=]') + 1, str.length);
//console.log(repaired);
fs.writeFile('./' + file, repaired, function (err) {
if (err)
console.error(err);
});
});
我也尝试过使用 {flag:'w'}
(我认为 fs.writeFile
可能已经默认)
感谢@thefourtheye 为我指明了正确的方向。
由于我测试的文件中没有 [=11=]
字符,str.indexOf('[=12=]')
获取了整个文件,str.slice(str.lastIndexOf('[=13=]')
再次获取了整个文件。这就是为什么我认为
使用替换功能完成了工作。
var repaired = str.replace(/[=10=]/g,'');
我遇到了相同或类似的问题,因为当我用不同的内容但同一个文件调用 fs.writeFile() 时,如果新内容比现有内容短,那么它不会覆盖所有内容以前的文件内容。
我在以下位置找到了可能发生这种情况的解释和建议的补救措施:
https://github.com/nodejs/node-v0.x-archive/issues/4965。
根据那个“这不是一个错误。(或者至少,不是 Node 曾经假装解决过的错误......”
建议的解决方案是“等待回调”。我认为这意味着“在尝试读取文件之前等待调用写回调”。这当然是有道理的,你不应该尝试阅读可能还没有完全写完的东西。
但是,如果您像我一样多次写入同一个文件,那么在读取之前等待(第一次)写入回调完成是不够的。为什么?因为你读的时候可能还有一个'write'正在进行,所以你会得到乱码。
我有一个文件,有时会在其中包含 [=12=]
个空字符。所以我需要修复它。
这就是我阅读它的原因,删除无效字符并重新写入。但是,fs.writeFile
并没有覆盖它以前的内容。新内容被追加,这不是我想要的。
是不是因为我的写码在读码里面?
fs.readFile('./' + file, function (err, data) {
if (err) {
console.error(err);
return;
}
var str = data.toString();
var repaired = str.slice(0, str.indexOf('[=11=]')) + str.slice(str.lastIndexOf('[=11=]') + 1, str.length);
//console.log(repaired);
fs.writeFile('./' + file, repaired, function (err) {
if (err)
console.error(err);
});
});
我也尝试过使用 {flag:'w'}
(我认为 fs.writeFile
可能已经默认)
感谢@thefourtheye 为我指明了正确的方向。
由于我测试的文件中没有 [=11=]
字符,str.indexOf('[=12=]')
获取了整个文件,str.slice(str.lastIndexOf('[=13=]')
再次获取了整个文件。这就是为什么我认为
使用替换功能完成了工作。
var repaired = str.replace(/[=10=]/g,'');
我遇到了相同或类似的问题,因为当我用不同的内容但同一个文件调用 fs.writeFile() 时,如果新内容比现有内容短,那么它不会覆盖所有内容以前的文件内容。
我在以下位置找到了可能发生这种情况的解释和建议的补救措施: https://github.com/nodejs/node-v0.x-archive/issues/4965。 根据那个“这不是一个错误。(或者至少,不是 Node 曾经假装解决过的错误......”
建议的解决方案是“等待回调”。我认为这意味着“在尝试读取文件之前等待调用写回调”。这当然是有道理的,你不应该尝试阅读可能还没有完全写完的东西。
但是,如果您像我一样多次写入同一个文件,那么在读取之前等待(第一次)写入回调完成是不够的。为什么?因为你读的时候可能还有一个'write'正在进行,所以你会得到乱码。