如何使用NodeJS判断文件或文件夹是否隐藏
判断文件/文件夹是否隐藏(Node.js 实现)
以下是跨平台的可运行代码,无需依赖第三方npm包,直接使用Node.js内置的fs和path模块实现:
异步版本(推荐,避免阻塞事件循环)
const fs = require('fs').promises; const path = require('path'); const { FILE_ATTRIBUTE_HIDDEN } = require('fs').constants; async function isHidden(filePath) { // 使用lstat获取文件/文件夹本身的信息(避免符号链接指向的目标文件干扰) const stat = await fs.lstat(filePath); const fileName = path.basename(filePath); // Unix/Linux/macOS 系统:隐藏文件/文件夹以.开头,排除特殊的.和..目录 if (process.platform !== 'win32') { return fileName.startsWith('.') && fileName !== '.' && fileName !== '..'; } // Windows系统:检查文件属性中的隐藏标记位 return !!(stat.mode & FILE_ATTRIBUTE_HIDDEN); } // 测试示例 (async () => { try { console.log('Unix下的.git目录是否隐藏:', await isHidden('./.git')); console.log('Windows下的AppData目录是否隐藏:', await isHidden('C:\\Users\\你的用户名\\AppData')); console.log('普通文件test.txt是否隐藏:', await isHidden('./test.txt')); } catch (error) { console.error('检查隐藏状态失败:', error.message); } })();
同步版本(适合简单场景)
const fs = require('fs'); const path = require('path'); const { FILE_ATTRIBUTE_HIDDEN } = fs.constants; function isHiddenSync(filePath) { const stat = fs.lstatSync(filePath); const fileName = path.basename(filePath); if (process.platform !== 'win32') { return fileName.startsWith('.') && fileName !== '.' && fileName !== '..'; } return !!(stat.mode & FILE_ATTRIBUTE_HIDDEN); } // 测试示例 try { console.log('Unix下的.git目录是否隐藏:', isHiddenSync('./.git')); console.log('Windows下的hidden.txt是否隐藏:', isHiddenSync('C:\\Users\\你的用户名\\Desktop\\hidden.txt')); console.log('普通文件normal.txt是否隐藏:', isHiddenSync('./normal.txt')); } catch (error) { console.error('检查隐藏状态失败:', error.message); }
代码说明
- 跨平台逻辑:
- Unix类系统(Linux、macOS等):遵循系统约定,文件名以
.开头且不是./..的文件/文件夹即为隐藏 - Windows系统:通过文件属性的
FILE_ATTRIBUTE_HIDDEN位掩码判断,这是系统级的隐藏标记
- Unix类系统(Linux、macOS等):遵循系统约定,文件名以
- 使用
lstat而非stat:避免符号链接(快捷方式)的干扰,确保判断的是链接本身而非目标文件的状态 - 错误处理:包含基础的异常捕获,处理文件不存在、权限不足等场景
内容的提问来源于stack exchange,提问作者Ehud Kirsh
相关产品推荐
相关产品推荐

