如何使用node.js查看损坏的文件写入

时间:2016-10-04 15:08:17

标签: node.js file fs

我的英语不太好,所以我希望能说清楚。

为了好奇,我想在同一个文件上测试多个并发(*)文件写入,看看是否会产生错误。

手册很清楚:

  

请注意,同时使用fs.writeFile多次是不安全的   文件无需等待回调。对于这种情况,   强烈建议使用fs.createWriteStream

因此,如果我将一个相对大量的数据写入一个文件,并且在它仍在写入的时候,我会在同一个文件上调用另一个文件而不等待回调...我期待某种错误

我试着写一个小例子来测试这种情况,但我无法看到任何错误。

"use strict";
const fs = require('fs');
const writeToFile = (filename, data) => new Promise((resolve, reject) => {
    fs.writeFile(filename, data, { flag: 'a' }, err => {
        if (err) {
            return reject(err);
        }
        return resolve();
    });
});
const getChars = (num, char) => {
    let result = '';
    for (let i = 0; i < num; ++i) {
        result += char;
    }
    return result + '\n';
};
const k = 10000000;
const data0 = getChars(k, 0);
const data1 = getChars(k, 1);
writeToFile('test1', data0)
    .then(() => console.log('0 written'))
    .catch(e => console.log('errors in write 0'));
writeToFile('test1', data1)
    .then(() => console.log('1 written'))
    .catch(e => console.log('errors in write 1'));

要测试它而不是用某个编辑器打开文件(在我的框中有点慢)我使用linux命令查看第一个缓冲区的结束和第二个缓冲区的开头(并且它们是不重叠):

tail -c 10000010 test1 | grep 0

但我不确定这是测试它的正确方法。

只是要明确我使用的是节点v6.2.2和mac 10.11.6。

那边有人能指出一个使用fs.writeFile产生错误输出的小草图吗?

(*)concurrent =不要等待一个文件写入结束以开始下一个文件

0 个答案:

没有答案