我似乎找不到任何解释如何做到这一点的搜索结果。
所有我想做的是能够知道一个给定的路径是一个文件还是一个目录(文件夹)。
我似乎找不到任何解释如何做到这一点的搜索结果。
所有我想做的是能够知道一个给定的路径是一个文件还是一个目录(文件夹)。
当前回答
我可以检查一个目录或文件是否存在:
// This returns if the file is not a directory.
if(fs.lstatSync(dir).isDirectory() == false) return;
// This returns if the folder is not a file.
if(fs.lstatSync(dir).isFile() == false) return;
其他回答
说真的,问题是存在了五年,却没有好的表象?
function isDir(path) {
try {
var stat = fs.lstatSync(path);
return stat.isDirectory();
} catch (e) {
// lstatSync throws an error if path doesn't exist
return false;
}
}
更新:Node.Js >= 10
我们可以用新的fs。承诺API
const fs = require('fs').promises;
(async() => {
const stat = await fs.lstat('test.txt');
console.log(stat.isFile());
})().catch(console.error)
任何Node.Js版本
下面介绍如何异步检测路径是文件还是目录,这是node中推荐的方法。 使用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
}
}
我可以检查一个目录或文件是否存在:
// This returns if the file is not a directory.
if(fs.lstatSync(dir).isDirectory() == false) return;
// This returns if the folder is not a file.
if(fs.lstatSync(dir).isFile() == false) return;
返回类型的函数
我喜欢咖啡
type: (uri)-> (fina) ->
fs.lstat uri, (erro,stats) ->
console.log {erro} if erro
fina(
stats.isDirectory() and "directory" or
stats.isFile() and "document" or
stats.isSymbolicLink() and "link" or
stats.isSocket() and "socket" or
stats.isBlockDevice() and "block" or
stats.isCharacterDevice() and "character" or
stats.isFIFO() and "fifo"
)
用法:
dozo.type("<path>") (type) ->
console.log "type is #{type}"
根据您的需要,您可能依赖于node的path模块。
您可能无法访问文件系统(例如,文件还没有创建),tbh您可能希望避免访问文件系统,除非您确实需要额外的验证。如果您可以假设要检查的内容如下。<extname>格式,那么只需查看名称即可。
显然,如果您正在寻找一个没有extname的文件,您将需要访问文件系统以确定。但是要保持简单,直到你需要更复杂的。
const path = require('path');
function isFile(pathItem) {
return !!path.extname(pathItem);
}