Как проверить, доступен ли каждый файл в пути для чтения или нет

Я пытаюсь прочитать содержимое определенного пути. для этой цели я использовал следующий код:

код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);
Другие вопросы по тегам