Mimic File.Move如果目的地已经存在

M.B*_*ock 7 c# copy file

来自以下文件File.Move:

请注意,如果您尝试通过将同名文件移动到该目录来替换文件,则会出现IOException.您不能使用Move方法覆盖现有文件.

简而言之,你不能覆盖Move,所以为了方便覆盖Move,我通过做一个File.Copy后面的模仿行为File.Delete.就像是:

if (File.Exists(dstFileName))
{
    // System.IO.File.Move cannot be used to overwrite existing files, so we're going
    // to simulate that behavior with a Copy & Delete.
    File.Copy(procContext.FileName, dstFileName);
    File.Delete(procContext.FileName);
}
else
    File.Move(procContext.FileName, dstFileName);
Run Code Online (Sandbox Code Playgroud)

我的问题是:是否有任何我需要防范的情况可能会导致源文件被删除而不首先被成功复制?

我从阅读文档中得到的理解是,因为File.Copy它不会返回任何在它不成功的情况下应该抛出异常的东西.有没有人遇到过任何不真实的情况?

Tud*_*dor 8

我建议你首先探查目标文件是否存在,如果是,则删除它.然后执行正常的移动操作.

由于此序列不是原子序列,因此如果目标存在,您可能希望重命名它而不是删除它,以避免在移动失败时丢失它.


Ars*_*ray 5

正确的方法是打电话

File.Replace(source, destination, copy)
Run Code Online (Sandbox Code Playgroud)

这对我有用