#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.