File.Move在前面有File.Delete时失败
我们有一个MoveFile方法,通常可以工作,但在客户站点仍然失败。
if (File.Exists(target)) { File.Delete(target); } File.Move(source, target);
对File.Move
的调用反复失败
System.IO.IOException: Cannot create a file when that file already exists. at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) at System.IO.__Error.WinIOError() at System.IO.File.Move(String sourceFileName, String destFileName)
我们有围绕调用该方法的error handling,但我们无法弄清楚为什么File.Delete
不工作并且没有抛出任何东西。
我们虽然关于文件权限,但是File.Delete
会抛出UnauthorizedAccessException
。
在删除该特定文件之前,是否有任何其他原因导致File.Move
失败,并且“文件已存在”?
你能扭转逻辑吗?
File.Copy (source, target, true)
然后覆盖目标
File.Delete(source)
在过去,我发现系统倾向于删除文件“慢”,而不是程序运行。
理想情况下,在尝试将文件移动到其位置之前,您需要检查文件是否已被删除。 通常你可以通过一个简单的Thread.Sleep(200)或类似方法绕过它,但它可能不是最可靠的方式!
我相信如果其他人使用FileShare.Delete选项打开文件(即允许删除),就会发生这种情况。 在这种情况下,文件将被标记为删除,但在关闭另一个句柄之前不会实际删除。
我不确定哪些进程可以以这种方式打开文件 – 防病毒软件是一种可能性。
我想你可能会得到更好的结果:
System.IO.File.Copy(sourceFileName, destFileName, overwrite);
所以overwrite = true
这将覆盖旧文件(如果存在),而不是担心单独删除它。
然后,您可以根据需要删除原始文件。
这是避免复制或轮询删除的更好方法—
我们假设我们有File_A和File_B。 我们想通过File_A移动File_B。
脚步:
1)将File_A重命名(移动)到第三个名称File_C。
2)删除File_C。
3)将File_B重命名(移动)到File_A。
File.Move("File_A", "File_C"); File.Delete("File_C"); File.Move("File_B", "File_A");
这消除了在将新文件移动到原始文件时,删除原始文件的情况。
- C#:TreeView所有者使用ownerdrawtext进行绘制,并在单击节点时使用奇怪的黑色突出显示
- 如果在WPF中不再存在,Triggers / DataTrigger会返回到先前的状态吗?
- 如何检查C#中是否安装了特定版本的Flash播放器。?
- 具有Nullable值的SqlParameter在ExecuteNonQuery时给出错误?
- 服务器是否可以使用来自客户端的文件而无需将其上传到服务器? ASP.NET
- CompilerParameters.ReferencedAssemblies – 添加对System.Web.UI.WebControls的引用
- 如何检查单词是否以给定字符开头?
- 从生成的表中检索数据时,对象名称“dbo.TableName”无效
- 如何以编程方式隐藏桌面图标?