Как удалить файл с помощью FileSystem в nodeJS? - PullRequest
1 голос
/ 09 марта 2020

Я не знаю почему, но я не могу удалить файл, используя unlink() и unlinksynk().

Я сохранил файл, используя метод multiparty.Form(). Он сгенерирует файл со случайным именем и вернет filePath и originalFileName. И после этого я переименовал файл с originalFileName.

Код:

      await form.parse(fileData, (err: Error, fields: any, res: any) => {
        if (err) {
          callback(err, null);
        } else {
          let file_path = res.file[0].path;
          let assignedFilePath = file_path.substr(res.file[0].path.lastIndexOf('\/') + 1);
          let originalFilePath = res.file[0].originalFilename;
          originalFilePath = path.dirname(assignedFilePath) + '\\' + originalFilePath;
          fs.rename(assignedFilePath, originalFilePath, function (err: any) {
            if (err)
              callback(err, null);
            else
              callback(err, JSON.stringify({'path': originalFilePath}));
          });
        }
      }); 

Код для deleteFile ()

 deleteTempFiles(tempFolderPath: string) {
    return new Promise(function (resolve: any, reject: any) {
      fs.readdir(tempFolderPath, (err: any, files: any) => {
        if (err) {
          reject();
        } else {
          for (let file of files) {
            fs.unlink(tempFolderPath + file, (err: any) => {
              if (err) {
                reject();
              }
            });
          }
          resolve();
        }
      });
    }).catch(function (e) {
      Promise.reject(e.message);
    })
  }

РЕДАКТИРОВАТЬ:

Ошибка при удалении файла, компилятор говорит Error: EBUSY: resource busy or locked, unlink.

А мне кажется, я нигде не использую файл в программе?

Заранее спасибо.

1 Ответ

1 голос
/ 09 марта 2020

==== 2-й ответ ===

Ваша deleteTempFiles функция совершенно неверна, прочитайте это удаление каждого файла в каталоге (и каталогах) внутри директории

У вас много логических ошибок в коде.

  1. Вы используете синхронизм для l oop, чтобы ставить в очередь задачи удаления списка файлов (и каталогов) из данного каталога.
  2. Вы отменяете связь со всеми - даже каталогами . и .. - невозможно
  3. Вы ВСЕГДА resolve s после этого l oop и отклоняет после 1-й ошибки - но обычно это отклонение должно быть много после разрешения (l oop быстро, это только очереди доступа, не выполняя еще не ссылки, затем выполняется разрешение).

==== 1-й ответ ===

У вас есть код для renameFile, который перемещает старое имя файла (и местоположение) в новое. Поэтому удаление старого файла не будет работать вообще, поэтому вам следует удалить новый файл.

...