如何在node.js中移动文件?

如何在node.js上移动文件(如mv命令外壳)?有什么方法可以使用,还是应该读取文件,写入新文件并删除旧文件?

Mandy2020/04/07 11:32:41

如果您尝试移动或重命名node.js源文件,请尝试使用此https://github.com/viruschidai/node-mv它将更新所有其他文件中对该文件的引用。

2020/04/07 11:32:40

我将所有涉及的功能(即rename)彼此分开copyunlink以获取灵活性并实现所有功能,当然:

const renameFile = (path, newPath) => 
  new Promise((res, rej) => {
    fs.rename(path, newPath, (err, data) =>
      err
        ? rej(err)
        : res(data));
  });

const copyFile = (path, newPath, flags) =>
  new Promise((res, rej) => {
    const readStream = fs.createReadStream(path),
      writeStream = fs.createWriteStream(newPath, {flags});

    readStream.on("error", rej);
    writeStream.on("error", rej);
    writeStream.on("finish", res);
    readStream.pipe(writeStream);
  });

const unlinkFile = path => 
  new Promise((res, rej) => {
    fs.unlink(path, (err, data) =>
      err
        ? rej(err)
        : res(data));
  });

const moveFile = (path, newPath, flags) =>
  renameFile(path, newPath)
    .catch(e => {
      if (e.code !== "EXDEV")
        throw new e;

      else
        return copyFile(path, newPath, flags)
          .then(() => unlinkFile(path));
    });

moveFile 只是一个便利函数,例如,当我们需要更细粒度的异常处理时,我们可以单独应用这些函数。

村村2020/04/07 11:32:40

根据seppo0010的评论,我使用了重命名功能。

http://nodejs.org/docs/latest/api/fs.html#fs_fs_rename_oldpath_newpath_callback

fs.rename(oldPath,newPath,回调)

在v0.0.2中添加

oldPath <String> | <Buffer>
newPath <String> | <Buffer>
callback <Function>

异步重命名(2)。除了可能的异常外,没有其他参数被提供给完成回调。

宝儿2020/04/07 11:32:40

使用mv节点模块,该模块将首先尝试执行an fs.rename,然后回退到复制然后取消链接。