我似乎无法获得任何解释如何执行此操作的搜索结果。
我想要做的就是能够知道给定的路径是文件还是目录(文件夹)。
答案 0 :(得分:493)
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()
答案 1 :(得分:40)
我们可以使用新的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);
}
})();
以下是如何检测路径是文件还是目录异步,这是节点中推荐的方法。 使用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
}
}
答案 2 :(得分:11)
严重的是,问题存在了五年,没有很好的门面吗?
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;
}
}
答案 3 :(得分:6)
根据您的需要,您可能可以依赖于节点的path
模块。
您可能无法访问文件系统(例如,尚未创建文件),并且可能要避免访问文件系统,除非您确实需要额外的验证。如果可以假设要检查的内容遵循.<extname>
格式,则只需查看名称即可。
很显然,如果您要查找的文件没有扩展名,则需要确定文件系统。但请保持简单,直到需要更复杂为止。
const path = require('path');
function isFile(pathItem) {
return !!path.extname(pathItem);
}
答案 4 :(得分:1)
上面的答案检查文件系统是否包含文件或目录的路径。但这不能确定给定路径本身是文件还是目录。
答案是使用“ /”标识基于目录的路径。就像->“ / c / dos / run /”。 <-跟踪期。
就像尚未写入的目录或文件的路径。或来自另一台计算机的路径。或同时存在同名文件和目录的路径。
SELECT
COUNT(*) AS none
FROM
college_votes
WHERE
`bd` IN ('none', '-Select for Board of Director-')
AND `bd1` IN ('none', '-Select for Board of Director-')
AND `bd2` IN ('none', '-Select for Board of Director-')
AND `bd3` IN ('none', '-Select for Board of Director-')
节点版本:v11.10.0-2019年2月
最后的想法:为什么还要打文件系统?
答案 5 :(得分:0)
这是我在某些程序中使用的独立功能。这篇文章中没人利用promisify
和await/async
功能,所以我想我会分享。
const isDirectory = async path => {
try {
return (await require('util').promisify(require('fs').lstat)(path)).isDirectory()
} catch (e) {
return false // or custom the error
}
}
注意:我不使用require('fs').promises;
,因为它已经试验了一年,而不是依赖它。