如何使用node.js同步检查文件或目录是否存在?


当前回答

fs.exists()已弃用,请勿使用https://nodejs.org/api/fs.html#fs_fs_exists_path_callback

您可以使用以下方式实现核心nodejs:https://github.com/nodejs/node-v0.x-archive/blob/master/lib/module.js#L86

function statPath(path) {
  try {
    return fs.statSync(path);
  } catch (ex) {}
  return false;
}

这将返回stats对象,然后在获得stats对象后,您可以尝试

var exist = statPath('/path/to/your/file.js');
if(exist && exist.isFile()) {
  // do something
}

其他回答

这已经得到了回答,但如果您喜欢安装模块,可以使用dtfe,它代表

文件是否存在?

const dtfe = require('dtfe');
 
dtfe('package.json');
//=> true

fs.exists()已弃用,请勿使用https://nodejs.org/api/fs.html#fs_fs_exists_path_callback

您可以使用以下方式实现核心nodejs:https://github.com/nodejs/node-v0.x-archive/blob/master/lib/module.js#L86

function statPath(path) {
  try {
    return fs.statSync(path);
  } catch (ex) {}
  return false;
}

这将返回stats对象,然后在获得stats对象后,您可以尝试

var exist = statPath('/path/to/your/file.js');
if(exist && exist.isFile()) {
  // do something
}

查看源代码,有一个同步版本的path.exists-path.existsSync。看起来文档中没有找到它。

更新:

path.exists和path.existsSync现在已弃用。请使用fs.exists和fs.existsSync。

2016年更新:

fs.exists和fs.existsSync也已被弃用。请改用fs.stat()或fs.access()。

2019年更新:

使用fs.existsSync。它没有被弃用。https://nodejs.org/api/fs.html#fs_fs_existssync_path

这里的一些答案表示fs.exists和fs.existsSync都已弃用。根据文件,这不再是事实。现在只弃用fs.exists:

请注意,fs.exists()已弃用,但fs.existsSync()未弃用。(fs.exists()的回调参数接受以下参数与其他Node.js回调不一致。fs.existsSync()不使用回调。)

因此,您可以安全地使用fs.existsSync()同步检查文件是否存在。

fs.stat()上的文档表示,如果您不打算操作文件,请使用fs.access()。它没有给出理由,可能更快或更少地用于纪念?

我使用node进行线性自动化,所以我想我共享用于测试文件存在性的函数。

var fs = require("fs");

function exists(path){
    //Remember file access time will slow your program.
    try{
        fs.accessSync(path);
    } catch (err){
        return false;
    }
    return true;
}