如何确定文件复制何时结束?

3
如何确定文件复制何时结束 我使用c#
编辑:我们通过网络从一台计算机复制文件到另一台计算机。 我的任务是监视目录并在文件复制到目录后执行某些操作。

1
你目前有什么代码?你为什么认为这个文件没有完全复制? - Sjoerd
是的。文件复制是一个阻塞操作,对吧? - TomTom
System.IO.File.Copy() 不是阻塞直到完成吗? - Bobby
我认为 File.IO.Copy 是同步的... - Joey
4个回答

6
如果您使用的是 File.Copy(),那么这个操作在文件实际被复制之后才完成。

3

建议查看FileSystemWatcher的Created事件,它与文件系统的监视相关。

一些常见的操作,例如复制或移动文件或目录,并不直接对应一个事件,但这些操作会引发事件。当您复制文件或目录时,系统将在复制到的目录中引发Created事件


2
事件将在文件创建后立即触发。这并不意味着文件中的数据已经完全写入。 - ata

2

我之前考虑过这个想法。但是我应该在什么时候停止检查呢? - ABBAPOH
当大小等于原始文件的大小时,请返回已翻译的文本。 - thelost
在此之前,我应该告诉大家,我是通过网络从一台电脑复制文件到另一台电脑。我不是通过代码复制文件。 - ABBAPOH
即便如此,在开始复制之前,您仍然可以获取大小。 - thelost
我怎样才能获得它?文件系统监视器没有提供这个信息。 - ABBAPOH
无论文件是在您的磁盘上还是在网络中的其他计算机上,都不重要 - 只有地址不同。 - thelost

1

我最近遇到了类似的问题。 我会在文件上使用File的open write属性来查看是否可以写入文件: 例如: FileStream fs = f.OpenWrite();

如果上述语句有效,则表示文件未被使用,即已完成复制。


好的,我能以某种方式操纵PC上的复制文件对话框(以确定何时关闭它)吗? 即不使用目标目录上的监视程序。 - ABBAPOH
我不确定这是否是最好的做法。首先,您需要识别进程。文件复制进程属于“Windows资源管理器”(如果您使用任务管理器)。除非有人知道如何轻松获取正确的进程。另一种方法是尝试重命名目标目录(例如Directory.Move())如果可以这样做,则目录未被使用且所有文件都已复制到该目录中。谢谢! - daehaai

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接