fs.appendFile但如果路径确实*不存在则失败

时间:2016-12-24 23:54:34

标签: node.js fs

查看fs文档,我正在寻找一个可以与fs.appendFile一起使用的标志,如果路径,则会出现错误。

如果路径确实存在,我看到与引发错误有关的标志,但是如果路径存在,我没有看到会引发错误的标志 -

https://nodejs.org/api/fs.html

1 个答案:

答案 0 :(得分:2)

首先,我认为您的意思是fs.appendFile(),因为您引用的fs.append()不在fs模块中。

如果文件不存在,似乎没有打开要追加的文件的标志会返回错误。你可以自己写一个。以下是如何操作的一般概念:

fs.appendToFileIfExist = function(file, data, encoding, callback) {
    // check for optional encoding argument
    if (typeof encoding === "function") {
        callback = encoding;
        encoding = 'utf8';
    }
    // r+ opens file for reading and writing. Error occurs if the file does 
    fs.open(file, 'r+', function(err, fd) {
        if (err) return callback(err);

        function done(err) {
            fs.close(fd, function(close_err) {
                fd = null;
                if (!err && close_err) {
                    // if no error passed in and there was a close error, return that
                    return callback(close_err);
                } else {
                    // otherwise return error passed in
                    callback(err);
                }
            });
        }

        // file is open here, call done(err) when we're done to clean up open file

        // get length of file so we know how to append
        fs.fstat(fd, function(err, stats) {
            if (err) return done(err);

            // write data to the end of the file
            fs.write(fd, data, stats.size, encoding, function(err) {
                done(err);
            });

        });
    });
}

当然,您可以在调用fs.appendFile()之前测试该文件是否存在,但由于竞争条件,不建议这样做。相反,建议您在fs.open()上设置正确的标志,如果文件不存在,则触发错误。