Проверьте разрешение перед использованием метода stat, чтобы избежать ошибок - PullRequest
3 голосов
/ 30 октября 2019

Я впервые пытаюсь просмотреть каталоги, но stat выдает ошибки для некоторых каталогов из-за отсутствия разрешения.

Error: EPERM: operation not permitted, stat 'K:\System Volume Information'

Я хотел бы просто избегать вызова stat для данного каталога, если он выдаст ошибку, но я не могу понять, как это сделать.

Я пыталсяглядя на игнорирование защищенных каталогов в целом. Тем не менее, во всех возникающих у меня вопросах использовались регулярные выражения, которые - насколько я ограничен в знаниях MacOS, Linux и того, как что-то обрабатывается в Windows - не подходили для среды Windows.

Я пытался проверить разрешения на чтение и запись для каталога, прежде чем делать какой-либо вызов stat, но, похоже, это ничего не дает?

async function scanDirs(){
  const
    r = await fsp.readFile('./config.json', 'utf8'),
    archives = JSON.parse(r).archives,
    fs = require('fs'),
    { join } = require('path'),
    traverse = async (dir) => {
      try {
        const perm = await fsp.access(dir, fs.constants.R_OK)
        if (perm === undefined){
          const stats = await fsp.stat(dir)
          if (stats.isDirectory()){
            const subfolders = await fsp.readdir(dir)
            subfolders.forEach(path => {
              const fullPath = join(dir, path)
              traverse( fullPath )
            })
          }
        }
      }
      catch (error){
        console.error(error)
      }
    }

  for (const dir of archives){
    traverse(dir)
  }
}

Я также только что попробовал проверитьразрешения для дочерних папок данной папки перед тем, как передать их обратно в traverse, но это тоже не работает.

            for (const path of subfolders){
              const
                fullPath = join(dir, path),
                perm = await fsp.access(fullPath, fs.constants.R_OK)
              if (perm === undefined) traverse(fullPath)
            }

Любая помощь приветствуется.

...