Узел.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
}
}