【问题标题】:copyFileSync vs writeFileSynccopyFileSync 与 writeFileSync
【发布时间】:2020-10-29 19:48:10
【问题描述】:

我正在处理文件操作并遇到了这个问题。

试图在网上寻找答案,但没有找到任何好的、准确的答案。

以下哪一种是更优化的文件复制方式?

readFileSync() -> writeFileSync()?

或者直接

copyFileSync()?

还注意到 copyFileSync 使用原始文件的时间戳。如果copyFileSync()更优化,有没有办法使用“复制时间时间戳”?

谢谢!

【问题讨论】:

  • 这不能回答你的问题,但是你可以把你的问题转过来 1) 你只想从src to dst 复制一个文件并保留 src 文件信息,然后使用copyFile* 2) 如果你想做一些事情,而不仅仅是从 src 复制到 dst 然后你需要 readfile -> transformations -> writeFile,你也可以在创建 filehandle 时操作文件信息,以便你可以修改创建时间等。
  • 底层的writeFile*copyFile*是nodejs用于IO的libuv平台自带的方法,我想你可能会问他们。 github.com/libuv/libuv/blob/master/src/unix/fs.c#L1148

标签: javascript node.js fs


【解决方案1】:

首先您需要知道读取文件内容然后将其写入另一个文件与复制文件不同,文件不仅仅是其原始内容,几乎所有文件都有与之关联的元数据,以及何时您读取文件内容并将其写入目的地,您会丢失该元数据。所以如果你想复制一个文件,请使用 copyFile 方法,否则你将不得不自己处理元数据。

其次,这两种方法在理论上应该具有相同的性能签名,实际上虽然它们在不同的条件下(不同的操作系统、不同的文件大小)可能存在差异,但是担心这更像是过早的优化。但是,出于性能考虑,最好使用这些方法的异步版本。

copyFileSync 不允许您直接更改文件的创建日期,但您可以使用 fs.stat 进行更改

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-20
    • 1970-01-01
    • 2020-01-29
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    • 2013-03-10
    相关资源
    最近更新 更多