我正在迭代一个文件目录,并想知道是否可以测试文件是否被隐藏。目前,我只是检查文件是否以“。”开头。或不。这可以在Mac(和Linux,也许)中使用,但是,我想知道如何在Windows上执行此操作?此外,句点是否会在所有版本的Linux中隐藏文件?
谢谢!
代码:
var fs = require('fs');
fs.readdir('/path', function(err, list) {
list.forEach(function(filename){
var isHidden = /^\./.test(filename);
// etc ...
});
});
答案 0 :(得分:16)
有效检测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);
};
答案 1 :(得分:6)
在Windows 7上使用节点0.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上实现GetFileAttributes()API(就像它由C ++或C#完成)。 AFAIK,这不在管道中(至少我在一些快速的谷歌搜索后没有发现任何内容)。
关于文件被隐藏在所有版本的unix中的问题,当一个句点加上前缀时:我没有遇到过这个不起作用的发行版,所以从我的pov:是的。