14 votes

Nodejs - Recherche de fichiers cachés

Je suis en train d'itérer un répertoire de fichiers et je me demandais s'il est possible de tester si un fichier est caché ou non. Actuellement, je vérifie simplement si le fichier commence par un '.' ou pas. Cela fonctionne sous Mac (et Linux, peut-être), mais je me demande comment je pourrais le faire sous Windows ? En outre, le point masquera-t-il le fichier dans toutes les versions de Linux ?

Merci !

Code :

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

19voto

L'expression régulière permettant de détecter efficacement les fichiers cachés et les chemins d'accès aux répertoires sous Unix serait un peu plus complexe en raison de la possibilité de leur existence dans une longue chaîne de chemins d'accès.

Le texte suivant tente d'y remédier.

/**
 * 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);
};

8voto

schaermu Points 6251

J'ai fait quelques tests rapides en utilisant node 0.6.x sur Windows 7. La configuration était un dossier contenant 1 dossier, 1 protégé, 1 caché et 1 fichier sans attributs spéciaux.

J'ai bouclé ce dossier et récupéré les statistiques pour les entrées (en utilisant fs.stat(path, callback)), voici les résultats :

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

Comme vous pouvez le constater, on peut faire la différence entre les fichiers protégés et les fichiers cachés/normaux grâce au mode, mais l'attribut caché est en fait un attribut réel qui n'a rien à voir avec le mode du fichier.

Afin d'identifier de manière fiable les fichiers cachés sous Windows, l'équipe node.js devrait implémenter l'API GetFileAttributes() sous Windows (comme cela est fait par C++ ou C#). AFAIK, ce n'est pas dans le pipeline (du moins, je n'ai rien trouvé après quelques recherches rapides sur Google).

Pour votre question concernant les fichiers qui sont cachés dans toutes les versions d'Unix lorsqu'ils sont préfixés par un point : je n'ai pas rencontré de distribution où cela ne fonctionnait pas, donc de mon point de vue : oui.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X