Nodejs - 检查隐藏文件

use*_*496 12 node.js

我正在迭代一个文件目录,并想知道是否可以测试文件是否被隐藏.目前,我只是检查文件是否以"."开头.或不.这可以在Mac(和Linux,也许)中使用,但是,我想知道如何在Windows上执行此操作?此外,这段时间会隐藏所有Linux版本的文件吗?

谢谢!

码:

var fs = require('fs');
fs.readdir('/path', function(err, list) {
   list.forEach(function(filename){
       var isHidden = /^\./.test(filename);
        // etc ...
    }); 
});
Run Code Online (Sandbox Code Playgroud)

Sha*_*rya 17

有效检测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);
};
Run Code Online (Sandbox Code Playgroud)

  • 不适用于 `(/(^|.\/)\.+[^\/\.]/g).test('/.DS_Store');` (3认同)

sch*_*rmu 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
Run Code Online (Sandbox Code Playgroud)

如您所见,通过模式可以区分受保护文件和隐藏/普通文件,但隐藏属性实际上是一个真实属性,与文件模式无关.

为了可靠地识别Windows上的隐藏文件,node.js团队必须在Windows上实现GetFileAttributes()API(就像它由C++或C#完成).AFAIK,这不在管道中(至少我在一些快速的谷歌搜索后没有发现任何东西).

关于文件被隐藏在所有版本的unix中的问题,当一个句点作为前缀时:我没有遇到过这个不起作用的发行版,所以从我的pov:是的.

  • 基于我上面的链接,我写了一个模块来简单地处理隐藏文件:https://www.npmjs.org/package/hidefile (2认同)