如何测试由createWriteStream()创建的文件是否可写?

时间:2019-05-27 23:13:29

标签: node.js typescript

在TypeScript中,我需要检查新创建的文件是否可写。该文件由createWriteStream()创建,并且在磁盘上尚不存在。

我研究了使用createWriteStream()返回的WriteStream对象的out.writable属性。在Windows 10上,writable始终为true,即使文件在磁盘上是只读的。不好。

然后我尝试使用fs.accessSync()。这样可以很好地识别已经存在的只读文件。但是,当createWriteStream()创建新文件时,fs.accessSync()会引发错误。

我正在使用TypeScript将数据附加到文件列表中。如果文件不存在,则应创建一个文件。如果无法写入任何文件,则会对该文件执行后备操作。

import * as fs from 'fs';
const tagFile = '~/new_file_name.txt';
const out:fs.WriteStream = fs.createWriteStream(tagFile, {flags:'a'});

const markFileBad = (err: string) => {
    // fallback action
    console.error(err);
    out.end();
};
out.on('open', (f) => {
    try {
        fs.accessSync(tagFile, fs.constants.W_OK);
        out.write('\n===\n');
    } catch (err) {
        markFileBad("Cannot write to " + tagFile);
    }
});
out.on('error', markFileBad);

0 个答案:

没有答案