0

目前我正在从我的本地机器上浏览一个文件,然后将它复制到另一个我正在读取文件的目录中。但是复制过程还没有完成(考虑到文件的大小)并且读取已经开始,所以它失败给我错误,每次我从读取文件中得到错误,它在不同的行。

如何仅在文件复制完成后才开始读取文件?

有没有办法验证复制的文件与原始文件的大小相同?

4

2 回答 2

1

不要复制它。重命名它,当你完成下载并关闭它时。那是原子的。它出现在目标目录中的那一刻,它就完成了。不能出现问题。故事结局。

它也是O(1)而不是O(N)。数十亿倍的速度。

于 2013-10-29T23:07:03.877 回答
0

我过去这样做的方式是写入复制文件的过程写入“临时”文件,然后在完成文件写入后将文件移动到读取位置。

所以写入过程将写入 info.txt.tmp。完成后,它将文件重命名为 info.txt。然后读取过程只需要检查 info.txt 的存在 - 它知道如果存在,它已经被完整地写入。

或者,您可以让写入过程将 info.txt 写入不同的目录,然后如果您不喜欢使用奇怪的文件扩展名,则将其移动到读取目录。

于 2013-10-29T22:40:36.673 回答