首页 文章

Node.js检查路径是文件还是目录

提问于
浏览
275

我似乎无法获得任何解释如何执行此操作的搜索结果 .

我想要做的就是能够知道给定路径是文件还是目录(文件夹) .

3 回答

  • 37

    说真的,问题存在五年,没有好看的外观?

    function is_dir(path) {
        try {
            var stat = fs.lstatSync(path);
            return stat.isDirectory();
        } catch (e) {
            // lstatSync throws an error if path doesn't exist
            return false;
        }
    }
    
  • 1

    更新:Node.Js> = 10

    我们可以使用新的fs.promises API

    实验此功能仍在积极开发中,并且在将来的任何版本中都会受到非向后兼容的更改甚至删除 . 建议不要在 生产环境 环境中使用该功能 . 实验功能不受Node.js语义版本控制模型的约束 .

    const fs = require('fs').promises;
    
    (async() => {
    
            try {
                const stat = await fs.lstat('test.txt');
                console.log(stat.isFile());
            } catch(err) {
                console.error(err);
            }
    })();
    

    任何Node.Js版本

    以下是检测路径是文件还是目录 asynchronously 的方法,这是节点中推荐的方法 . 使用fs.lstat

    const fs = require("fs");
    
    let path = "/path/to/something";
    
    fs.lstat(path, (err, stats) => {
    
        if(err)
            return console.log(err); //Handle error
    
        console.log(`Is file: ${stats.isFile()}`);
        console.log(`Is directory: ${stats.isDirectory()}`);
        console.log(`Is symbolic link: ${stats.isSymbolicLink()}`);
        console.log(`Is FIFO: ${stats.isFIFO()}`);
        console.log(`Is socket: ${stats.isSocket()}`);
        console.log(`Is character device: ${stats.isCharacterDevice()}`);
        console.log(`Is block device: ${stats.isBlockDevice()}`);
    });
    

    使用同步API时请注意:

    使用同步表单时,会立即抛出任何异常 . 您可以使用try / catch来处理异常或允许它们冒泡 .

    try{
         fs.lstatSync("/some/path").isDirectory()
    }catch(e){
       // Handle error
       if(e.code == 'ENOENT'){
         //no such file or directory
         //do something
       }else {
         //do something else
       }
    }
    
  • 442

    fs.lstatSync(path_string).isDirectory() 应该告诉你 . 来自docs

    从fs.stat()和fs.lstat()返回的对象属于此类型 . stats.isFile()
    stats.isDirectory()
    stats.isBlockDevice()
    stats.isCharacterDevice()
    stats.isSymbolicLink()(仅对fs.lstat()有效)
    stats.isFIFO()
    stats.isSocket()

相关问题