1

我不知道为什么,但我无法使用unlink()and删除文件unlinksynk()

我已经使用multiparty.Form()方法存储了文件。它将生成具有随机名称的文件并返回filePathoriginalFileName. 在此之后,我已将文件重命名为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

而且我认为我没有在程序中的任何地方使用该文件?

提前致谢 。

4

1 回答 1

1

==== 第二个答案 ===

你的deleteTempFiles函数是完全错误的阅读这个删除目录(和目录)中的每个文件

您的代码中有许多逻辑错误。

  1. 您使用 synchronius for 循环,对从给定目录中删除文件列表(和目录)的任务进行排队。
  2. 您取消链接所有 - 甚至目录.-..不可能
  3. 你总是resolve在那个循环之后,并在第一个错误之后拒绝 - 但通常那个拒绝应该在解析之后很久(循环很快,它只排队 io 访问,不执行取消链接,然后执行解析)。

==== 第一个答案 ===

您有 的代码renameFile,它将文件从旧名称(和位置)移动到新名称。因此删除旧文件根本不起作用,因此您应该删除新文件。

于 2020-03-09T13:02:02.483 回答