Я пытаюсь проверить путь к каталогу. Все, что мне нужно, это выдать ошибку в случае, если папка вообще недоступна или у пользователя нет прав на запись. Мне нужно запустить проверку синхронно.
Проблема возникает ТОЛЬКО на машинах с Windows. Кажется, что fs.accessSync(path, fs.constants.R_OK | fs.constants.W_OK)
работает по-разному для систем posix и win32. В Windows он никогда не выдаст ошибку, если каталог существует, даже если у пользователя нет необходимых разрешений для записи в эту папку. На macOS выдает ошибку просто отлично.
fs.accessSync(pathToADirectoryWithWriteRestrictions, fs.constants.W_OK);
// undefined on windows. Indicating that path is accessible as per docs;
// throws an error on mac
Ожидается: fs.accessSync выдаст ошибку EPERM, сказав, что у пользователя нет необходимых разрешений для записи в этот каталог.
Другой вариант, который я пробовал - получать статистику каталога с помощьюfs.statSync
, преобразовав его свойство mode
в восьмеричную систему счисления, чтобы получить Unix-подобные номера разрешений.
Я обнаружил, что свойство mode не изменяется, даже если я изменяю разрешения для этой папки. Он показывает 16822 все время, что в основном является правами чтения и записи.
// getting directory stats
const directoryStats = fs.statSync(pathToDirectory);
const statsMode = directoryStats.mode; // 16822
// converting directory stats mode to the Octal numeral system
// to get unix-like permission numbers
const unixLikePermissions = '0' + (directoryStats.mode & parseInt('777', 8)).toString(8);
console.log(unixLikePermissions) // 0666
Есть ли другой способ проверить, обладает ли пользователь всеми необходимыми правами для работы с определенным каталогом, используя node.js? Я что-то упустил?