Node.js Nodejs-检查隐藏文件

Node.js Nodejs-检查隐藏文件,node.js,Node.js,我正在迭代一个文件目录,想知道是否有可能测试一个文件是否隐藏。目前,我正在检查文件是否以“.”开头。这在Mac(也许还有Linux)上是可行的,但是,我想知道在Windows上该怎么做?另外,这段时间是否会在所有版本的Linux中隐藏该文件 谢谢 代码: 在Windows7上使用Node0.6.x进行了一些快速测试。安装程序是一个包含1个文件夹、1个受保护、1个隐藏和1个无特殊属性的文件的文件夹 我循环此文件夹并获取条目的统计信息(使用fs.stat(path,callback)),结果如下:

我正在迭代一个文件目录,想知道是否有可能测试一个文件是否隐藏。目前,我正在检查文件是否以“.”开头。这在Mac(也许还有Linux)上是可行的,但是,我想知道在Windows上该怎么做?另外,这段时间是否会在所有版本的Linux中隐藏该文件

谢谢

代码:


在Windows7上使用Node0.6.x进行了一些快速测试。安装程序是一个包含1个文件夹、1个受保护、1个隐藏和1个无特殊属性的文件的文件夹

我循环此文件夹并获取条目的统计信息(使用fs.stat(path,callback)),结果如下:

testfolder
fs.Stats.mode: 16895

test_hidden.txt
fs.Stats.mode: 33206

test_norm.txt
fs.Stats.mode: 33206

test_prot.txt
fs.Stats.mode: 33060
如您所见,通过模式可以区分受保护文件和隐藏/普通文件,但隐藏属性实际上是真实属性,与文件模式无关

<>为了在Windows上可靠地识别隐藏文件,NoDE.JS团队必须在Windows上实现GETFILITY()API(就像C++或C语言所做的那样)。好了,这不是在管道中(至少我在谷歌上快速搜索后什么也没发现)


对于您关于文件在所有unix版本中都以句号作为前缀时被隐藏的问题:我没有遇到这样做不起作用的发行版,因此,从我的观点来看:是的。

在Unix中有效检测隐藏文件和目录路径的正则表达式可能会更复杂一些,因为它们可能存在于长路径字符串中

下面将尝试处理相同的问题

/**
 * Checks whether a path starts with or contains a hidden file or a folder.
 * @param {string} source - The path of the file that needs to be validated.
 * returns {boolean} - `true` if the source is blacklisted and otherwise `false`.
 */
var isUnixHiddenPath = function (path) {
    return (/(^|\/)\.[^\/\.]/g).test(path);
};
你可以使用这个软件包。它使用本机C++的ADONS检查文件是否隐藏在Windows上,并使用正则表达式检查文件是否隐藏在UNIX上。 套餐链接:


Package repo:

使用Windows桌面上的文件和文件夹进行测试。无论我应用了什么标准属性组合,所有文件的模式都是33060,所有文件夹的模式都是16822。查看使用主机脚本的解决方案。基于我上面的链接,我编写了一个模块来处理隐藏文件:不适用于
(/(^\.\/)\.+[^\/\.]/g)
是否将隐藏文件简单定义为以句点开头?是-但仅在Unix操作系统上。它也可能意味着一个隐藏的目录。Re:“它们存在于长路径字符串中的可能性…”对于
fs.readdir
?我的理解是,调用只返回目录中文件的名称。在macOS上隐藏文件有多种方法。另一种主要方法是通过nodeJS不公开的
stat()
函数返回的额外字段中的隐藏标志。您可以使用terminal命令
chflags
对其进行更改,通过执行
ls-lO
/**
 * Checks whether a path starts with or contains a hidden file or a folder.
 * @param {string} source - The path of the file that needs to be validated.
 * returns {boolean} - `true` if the source is blacklisted and otherwise `false`.
 */
var isUnixHiddenPath = function (path) {
    return (/(^|\/)\.[^\/\.]/g).test(path);
};