4

我试图找到一种跨平台的方式来可靠地判断文件是否已完成复制(通过外部进程)。

以前,在 OSX/Linux 上,我只是在检查

File file = new File("path/to/file");
file.length()

然后等待几秒钟并再次检查它是否已更改。

然而,这在 Windows 上不起作用,因为该方法总是返回完整文件的大小(即它最终将被复制一次的大小)。

我也试过检查 lastModified 时间戳,但这似乎也没有改变。

4

2 回答 2

2

一种选择是尝试使用“附加”打开文件进行写入FileOutputStream- 如果可以这样做,则另一个进程不太可能也在写入文件。当然,您不需要写入任何数据 - 只需创建流。

(编辑以删除已经存在的问题,即使用lastModified.)

于 2012-10-01T16:45:50.413 回答
0

我最终通过在两个不同的时间点计算文件的校验和和哈希(而不是长度)并检查它们是否已更改以确定文件是否仍在被写入来解决这个问题。

于 2012-10-05T15:21:49.803 回答