2016-12-24 6 views
1

fsドキュメントを見て、fs.appendFileで使用できるフラグを探しています。パスにエラーが発生すると、は存在しません。が存在します。 。fs.appendFileただし、パスが存在しない場合は失敗する*なし*

パスがすでに存在しないが、私はパスがが存在していない場合は、エラーが発生します旗を見ていないです場合、私は、エラーを上げるに関連するフラグを見ています -

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

答えて

1

ファーストをオフにあなたが参照しているfs.append()fsモジュールにないので、fs.appendFile()を意味すると見なします。

ファイルが存在しない場合にエラーを返す、追加するファイルを開くフラグがないようです。あなたは自分で書くことができます。ここでこれを行う方法のための一般的な考え方だ:

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()に設定し、ファイルが存在しない場合はそのトリガーにエラーを発生させることをお勧めします。

+0

ありがとうございました。私はfs.appendFileを意味していました。元の質問を編集しました。 –

関連する問題