如何检查文件是否存在?


当前回答

经过一些实验,我找到了下面使用fs的示例。Stat是异步检查文件是否存在的好方法。它还检查您的“文件”是否“真的是一个文件”(而不是一个目录)。

这个方法使用Promises,假设你使用的是异步代码库:

const fileExists = path => {
  return new Promise((resolve, reject) => {
    try {
      fs.stat(path, (error, file) => {
        if (!error && file.isFile()) {
          return resolve(true);
        }

        if (error && error.code === 'ENOENT') {
          return resolve(false);
        }
      });
    } catch (err) {
      reject(err);
    }
  });
};

如果文件不存在,承诺仍然解析,尽管是错误的。如果文件确实存在,并且它是一个目录,则is解析为true。任何试图读取文件的错误都将拒绝错误本身的承诺。

其他回答

关于fs.existsSync()被弃用有很多不准确的评论;事实并非如此。

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

注意fs.exists()已弃用,但fs.existsSync()未弃用。

一种更简单的同步方法。

if (fs.existsSync('/etc/file')) {
    console.log('Found file');
}

API文档说明了existsSync是如何工作的: 通过检查文件系统来测试给定路径是否存在。

fs。Exists自1.0.0以来已弃用。你可以用fs。用统计代替。

var fs = require('fs');
fs.stat(path, (err, stats) => {
if ( !stats.isFile(filename) ) { // do this 
}  
else { // do this 
}});

这里是文档的链接 fs.stats

现代异步/等待方式(Node 12.8. net)。x)

const fileExists = async path => !!(await fs.promises.stat(path).catch(e => false));

const main = async () => {
    console.log(await fileExists('/path/myfile.txt'));
}

main();

我们需要使用fs.stat()或fs.access(),因为fs。Exists (path, callback)现在已弃用

另一个好方法是fs-extra

  fs.statSync(path, function(err, stat){
      if(err == null) {
          console.log('File exists');
          //code when all ok
      }else if (err.code == "ENOENT") {
        //file doesn't exist
        console.log('not file');

      }
      else {
        console.log('Some other error: ', err.code);
      }
    });