Узел JS — нет такого файла?

#node.js #file #error-handling #filestream #chmod

#node.js #файл #обработка ошибок #filestream #chmod

Вопрос:

Я использую этот фрагмент кода для удаления файла по требованию

 {
...
    fs.access(path, (err)=> err || fs.unlink(path));    
...
}
  

Я получил эту ошибку

Ошибка: ENOENT: нет такого файла или каталога, разблокируйте ‘C: … ‘ при ошибке (родной)

Для меня это не имеет смысла, поскольку я буквально только что проверил наличие файлов, прежде чем пытаться разорвать связь — у меня такое чувство, что за кулисами происходит что-то странное, например, блокировка файлов.

Как мне исправить эту ошибку?

Кроме того, нужно ли мне самому блокировать файл перед попыткой удаления, чтобы гарантировать надежное и безопасное удаление. Я не буду там, чтобы вручную удалять файл и перезапускать сервер каждый раз, когда пользователь пытается удалить свой файл.

Комментарии:

1. «Я буквально только что проверил наличие файлов, прежде чем пытаться разорвать связь» — Не делайте этого, это плохая практика. Не выполняйте проверки существования файлов (они устарели по какой-то причине). Просто разорвите связь и поймайте ошибку, если таковая имеется.

2. должен ли я рекурсивно отключать связь, пока она не заработает

3. ошибок не будет, я в замешательстве

4. За долю секунды между тем, когда вы выполнили проверку «существует», и когда вы вызываете unlink, файл может быть уже удален из-за внешних факторов. Неважно, если это возможно для вашего приложения, это все еще технически возможно. Поэтому проверки «существует», как правило, бесполезны. Просто делать то, что вы хотите сделать (читать, записывать, удалять) и обрабатывать ошибки по мере их возникновения — единственная полезная стратегия при взаимодействии с файловой системой.

5. должен ли я продолжать пытаться удалить, пока он не удалит

Ответ №1:

не рекомендуется вызывать fs.access перед записью или удалением. Пожалуйста, проверьте ссылку ниже https://nodejs.org/api/fs.html#fs_fs_access_path_mode_callback

 Using fs.access() to check for the accessibility of a file before calling fs.open(), fs.readFile() or fs.writeFile() is not recommended. Doing so introduces a race condition, since other processes may change the file's state between the two calls. Instead, user code should open/read/write the file directly and handle the error raised if the file is not accessible.