Узел.JS проверьте, является ли путь файлом или каталогом

Я не могу получить результаты поиска, которые объясняют, как это сделать.

все, что я хочу сделать, это знать, является ли данный путь файлом или каталогом (папкой).

2 ответов


fs.lstatSync(path_string).isDirectory() должен вам сказать. От docs:

объекты, возвращенные из fs.stat () и fs.lstat() относятся к этому типу.

stats.isFile()
stats.isDirectory()
stats.isBlockDevice()
stats.isCharacterDevice()
stats.isSymbolicLink() (only valid with fs.lstat())
stats.isFIFO()
stats.isSocket()

Обновление: Узел.В JS >= 10

мы можем использовать новый fs.обещания API

Experimental эта функция все еще находится в стадии активной разработки и тема не совместима изменения или даже удаления, в любом будущая версия. Использование функции не рекомендуется в производстве окружающая среда. Экспериментальные функции не подчиняются узлу.Яш Семантическая модель управления версиями.

const fs = require('fs').promises;

(async() => {

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

Любой Узел.Яш версия

вот как вы могли бы определить, является ли путь файлом или каталогом асинхронно, который является рекомендуемым подходом в узел. используя 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
   }
}