2012-01-18 61 views
11

ファイルのディレクトリを繰り返し処理していて、ファイルが隠されているかどうかをテストできるかどうか疑問に思っていました。現在、ファイルが '。'で始まっているかどうかを確認しています。か否か。これはMac(とLinux、多分)でも動作しますが、Windowsでどうやってやるのだろうと思いますか?また、この期間は、Linuxのあらゆる種類のファイルを非表示にしますか?Nodejs - 隠しファイルを確認する

ありがとうございます!

コード:

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

答えて

6

は、セットアップは特別な属性なし1つのフォルダ、1は保護され、1隠され、1ファイルを含むフォルダだったのWindows 7上のノード0.6.xを使用していくつかの簡単なテストをしました。

私はこのフォルダをループし、エントリの統計情報をフェッチ(fs.stat(パス、コールバック)を使用して)、これらの結果である:あなたが見ることができるように

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 

、1が間に異なることが可能です隠し属性は実際の属性であり、ファイルモードとは関係ありません。

Windows上の隠しファイルを確実に識別するために、node.jsチームはWindows上でGetFileAttributes()APIを実装する必要があります(C++やC#で行われたような)。 AFAIK、これはパイプラインにはありません(少なくとも私はいくつかの迅速なグーグル後に何も見つかりませんでした)。

期間の前に付いているファイルはすべてunixの隠れたところにあります:これはうまくいきませんでしたので、私のpov:yesから配布されていませんでした。

+0

Windowsデスクトップのファイルとフォルダでテストします。私が適用した標準属性の組み合わせに関係なく、すべてのファイルには33060のモードがあり、すべてのフォルダには16822のモードがあります。http://stackoverflow.com/questions/13440589/retrieve-file-attributes-from-windowsホストスクリプトを使用するソリューションの場合は-cmd。 –

+1

私の上記のリンクに基づいて、単純に隠しファイルを処理するモジュールを作成しました:https://www.npmjs.org/package/hidefile –

14

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

'(/(^ |。\ /)\。+ [^\/\。]/g).test( '/。DS_Store'); ' – Izhaki

+1

@Izhaki - 更新された正規表現。指摘してくれてありがとう。 –

+0

隠しファイルは単にピリオドで始まると定義されていますか? –

関連する問題