2012-01-18 26 views
11

Estoy iterando un directorio de archivos y me preguntaba si es posible probar si un archivo está oculto o no. Actualmente, solo estoy verificando si el archivo comienza con un '.' o no. Esto funciona en Mac (y Linux, tal vez), pero, me pregunto cómo lo haría en Windows. Además, ¿ocultará el período el archivo en todos los gustos de Linux?Nodejs - Buscar archivos ocultos

Gracias!

Código:

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

Respuesta

6

hicimos algunas pruebas rápidas utilizando 0.6.x nodo en Windows 7. La instalación era una carpeta que contiene la carpeta 1, 1 protegido, 1 oculto y 1 archivo sin atributos especiales.

I bucle esta carpeta y tomaron las estadísticas para las entradas (usando fs.stat (path, devolución de llamada)), estos son los resultados:

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 

Como se puede ver, uno es capaz de diferir entre archivos protegidos y ocultos/normales a través del modo, pero el atributo oculto es en realidad un atributo real y no tiene nada que ver con el modo de archivo.

Para identificar de manera confiable archivos ocultos en Windows, el equipo node.js tendría que implementar la API GetFileAttributes() en Windows (como lo hace C++ o C#). AFAIK, esto no está en la tubería (al menos no encontré nada después de un rápido google).

Para su pregunta sobre los archivos que se ocultan en todos los sabores de unix con el prefijo de un punto: no me encontré con una distribución donde esto no funcionó, por lo que desde mi punto de vista: sí.

+0

Prueba con archivos y carpetas en mi escritorio de Windows. No importa qué combinación de atributo estándar haya aplicado, todos los archivos tenían un modo de 33060 y todas las carpetas tenían un modo de 16822. Consulte http://stackoverflow.com/questions/13440589/retrieve-file-attributes-from-windows -cmd para una solución que utiliza un script de host. –

+1

Basado en mi enlace anterior, escribí un módulo para manejar archivos ocultos simplemente: https://www.npmjs.org/package/hidefile –

14

La expresión regular para detectar efectivamente los archivos ocultos y la ruta del directorio en Unix sería un poco más compleja debido a la posibilidad de que exista dentro de una cadena de ruta larga.

Lo siguiente trata de encargarse de lo mismo.

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

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

+1

@Izhaki - regex actualizada. gracias por señalar. –

+0

¿Un archivo oculto simplemente se define como comenzar con un punto? –

Cuestiones relacionadas