Nodejs - проверка скрытых файлов
Я повторяю каталог файлов и задаюсь вопросом, можно ли проверить, скрыт ли файл или нет. В настоящее время я просто проверяю, начинается ли файл с '.' или нет. Это работает в Mac (и Linux, может быть), но мне интересно, как я буду делать это в Windows? Кроме того, будет ли период скрывать файл во всех вариантах Linux?
Спасибо!
код:
var fs = require('fs');
fs.readdir('/path', function(err, list) {
list.forEach(function(filename){
var isHidden = /^\./.test(filename);
// etc ...
});
});
Ответы
Ответ 1
Регулярное выражение для эффективного обнаружения скрытых файлов и пути каталога в 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);
};
Ответ 2
Прошло некоторое быстрое тестирование с использованием node 0.6.x в Windows 7. Настройка была папкой, содержащей 1 папку, 1 защищенный, 1 скрытый и 1 файл без специальных атрибутов.
Я зациклил эту папку и извлек статистику для записей (используя 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
Как вы можете видеть, каждый может различать защищенные и скрытые/нормальные файлы через режим, но скрытый атрибут на самом деле является реальным атрибутом и не имеет ничего общего с файловым режимом.
Чтобы надежно идентифицировать скрытые файлы в Windows, команде node.js пришлось бы реализовать API GetFileAttributes() в Windows (как это делали С++ или С#). AFAIK, это не в конвейере (по крайней мере, я ничего не нашел после быстрого поиска в Google).
Для вашего вопроса о том, что файлы скрыты во всех вариантах unix, когда префикс периода: я не попадал в дистрибутив, где это не сработало, поэтому из моего pov: yes.