到目前为止,当我必须跨共享移动文件时,我使用如下代码:
我使用了上述过程,因为我认为您无法使用File.Move在共享或卷之间移动文件。在今天挖掘了一下后,我意识到你可以这样做,所以我的下一个问题是如何处理故障,即底层.NET代码是否实际复制然后删除文件?
我在reference source检查了File.Move代码,看到它实际上调用了Windows MoveFile API。
所以我的问题是,我可以安全地使用File.Move在UNC路径上移动文件吗?
答案 0 :(得分:2)
我可能错了,但似乎你确实得到了复制后删除语义。
MoveFile
说
要指定如何移动文件,请使用
MoveFileEx
或MoveFileWithProgress
功能。要执行此操作 交易操作,使用MoveFileTransacted
函数。
这意味着MoveFile
不提供事务语义或保证“文件如何移动”(文档中没有其他内容引用此类文件)。
移动文件时,目标可以位于不同的文件系统上 或音量。如果目标位于另一个驱动器上,则必须设置
MOVEFILE_COPY_ALLOWED
中的dwFlags
标记。
如果要将文件移动到其他卷,则该功能 使用
CopyFile
和DeleteFile
函数模拟移动。如果 该文件已成功复制到其他卷和原始文件 文件无法删除,功能成功离开源 档案完整。
我解释这一点的方式是,由于MoveFileEx
在移动卷时没有为您提供处理选项,因此MoveFile
也适用于该模式。< / p>
此外,跨卷移动意味着可能跨文件系统甚至机器移动(特别是在使用UNC路径时)。在这种情况下,除了逐步复制其内容之外,无法将文件放在其目标路径中,这似乎几乎可以保证操作将是复制后删除。