2012-01-18 11 views
11

Sto iterando una directory di file e mi chiedevo se è possibile verificare se un file è nascosto o meno. Attualmente, sto solo controllando se il file inizia con un '.' o no. Funziona su Mac (e Linux, forse), ma, mi chiedo come lo farei su Windows? Inoltre, il periodo nasconde il file in tutti i gusti di Linux?Nodejs - Verifica file nascosti

Grazie!

Codice:

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

risposta

6

fatto dei test rapido utilizzando nodo 0.6.x su Windows 7. L'installazione è stata una cartella contenente 1 cartella, 1 protetta, 1 nascosto e 1 file senza attributi speciali.

ho cappio questa cartella e andò a prendere le statistiche per le voci (utilizzando fs.stat (percorso, callback)), questi sono i risultati:

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 

Come si può vedere, si è in grado di variare da un file protetti e nascosti/normali attraverso la modalità, ma l'attributo nascosto è in realtà un vero attributo e non ha nulla a che fare con la modalità file.

Per identificare in modo affidabile i file nascosti su Windows, il team node.js dovrebbe implementare l'API GetFileAttributes() su Windows (come è fatto da C++ o C#). AFAIK, questo non è nella pipeline (almeno non ho trovato nulla dopo un po 'di googling veloce).

Per la tua domanda riguardante i file che sono nascosti in tutti i sapori di Unix quando prefissati da un punto: non mi sono imbattuto in una distribuzione in cui questo non ha funzionato, quindi dal mio pov: sì.

+0

Test con file e cartelle sul desktop di Windows. Indipendentemente dalla combinazione dell'attributo standard che avevo applicato, tutti i file avevano una modalità di 33060 e tutte le cartelle avevano una modalità di 16822. Consulta http://stackoverflow.com/questions/13440589/retrieve-file-attributes-from-windows -cmd per una soluzione che utilizza uno script host. –

+1

Sulla base del mio link sopra, ho scritto un modulo per gestire i file nascosti semplicemente: https://www.npmjs.org/package/hidefile –

14

L'espressione regolare per rilevare in modo efficace i file nascosti e il percorso di directory in Unix sarebbe un po 'più complessa a causa della possibilità della loro esistenza all'interno di una lunga stringa di percorso.

Il seguente tentativo di prendersi cura dello stesso.

/** 
* 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

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

+1

@Izhaki - regex aggiornato. grazie per avermelo fatto notare –

+0

Un file nascosto è semplicemente definito come iniziante con un punto? –