Как проверить, доступен ли каждый файл в пути для чтения или нет
Я пытаюсь прочитать содержимое определенного пути. для этой цели я использовал следующий код:
код1:
const contentsOfPersonalFolder = fs.readdirSync(rootPathToPersonal);
но я заранее знаю, что у меня нет прав доступа для чтения содержимого, которое будет возвращено из предыдущей строки кода. Чтобы проверить, есть ли у меня разрешение на чтение некоторых файлов, я бы использовал следующий код
код2:
try {
fs.accessSync(path, fs.constants.R_OK);
logger.info('The directory: ', path, 'can be read');
} catch (err) {
logger.error('The directory: ', path, 'can not be read due inaccessibility');
}
Теперь проблема в том, что код в code1 вернет массив всех доступных файлов по указанному пути. и если один из этих файлов недоступен из-за защиты прав на чтение, он сгенерирует и программа сгенерирует.
чего я хочу добиться, так это перебирать все доступные файлы по указанному пути в code1, а затем проверять каждый элемент, используя код в code2, и если файл доступен для чтения, я хотел бы сделать некоторую логику, и если это не доступен для чтения, я бы сделал что-то еще.
пожалуйста, дайте мне знать, как этого добиться.
2 ответа
Вы можете использовать fs.access для проверки прав доступа пользователей https://nodejs.org/api/fs.html
const testFolder = './tests/';
const fs = require('fs');
fs.readdir(testFolder, (err, files) => {
files.forEach(file => {
console.log(file);
fs.access(file, fs.constants.R_OK, (err) => {
if (err) {
console.error("file is not readable");
return;
}
// do your reading operations
});
});
})
const fs = require('fs');
const isAvailableToRead = file => {
try {
fs.accessSync(file, fs.constants.R_OK);
return true;
} catch (err) {
return false;
}
}
const readDirectory = path => {
const files = fs.readdirSync(path);
files.forEach(file => {
if(isAvailableToRead(file)) {
console.log(`Do some logic ${file}`);
}
});
}
readDirectory(__dirname);