.net - System.IO.File.Move 给出异常 "The file exists"

标签 .net exception

通常,如果您尝试移动到存在的文件,File.Move 会抛出消息“当该文件已存在时无法创建文件”。

我遇到了 File.Move 抛出的情况

"The file exists"



此异常由 System.IO.__Error.WinIOError 抛出做完后直接File.Move
它正在尝试将文件移动到网络驱动器。

经过一番搜索,唯一能提供此特定信息的似乎是 Path.GetTempFileName() - 如果临时文件夹已满,则可能会抛出此问题。

我没有使用 GetTempFileName ,并且临时文件夹未满。

有谁知道可能导致这种情况的原因,或者如何排除故障?
(这是在托管服务器上,只有管理公司可以访问,我无法在此处显示专有代码)。

最佳答案

这是来自 Windows,针对不同场景的不同错误代码。第二个是 ERROR_ALREADY_EXISTS,当文件从一个目录移动到同一驱动器上的另一个目录时,“当该文件已经存在时无法创建文件”。这是一个非常简单的操作,它只需要移动目录条目。

第一个是 ERROR_FILE_EXISTS,当文件从一个驱动器移动到另一个驱动器时,“文件存在”。这是一个更复杂的操作,还必须复制文件数据。换句话说,它回退到 File.Copy(string, string, bool) 的等效项,并将最后一个覆盖参数设置为 false。它不使用相同的错误代码有点奇怪。区别对文件系统驱动程序来说很重要,而对您的程序来说则不然。否则,您只是得到一个非常通用的 IOException 而不是一个更具体的将文件操作事故分解为更细粒度的异常的原因。

这实际上不是问题,因为您在代码中对此无能为力,您需要人的帮助来纠正问题。除非您在自己的代码中采取特定的先发制人的措施,否则要么在目标文件已经存在的情况下避免移动,要么首先实际删除目标文件。请注意,这两种方法都不是 100% 可靠的解决方法,在您删除文件之后但在您移动之前,另一个进程再次创建该文件的可能性很小。在多任务操作系统上,使文件操作完全可靠是相当困难的。

关于.net - System.IO.File.Move 给出异常 "The file exists",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18659716/

相关文章:

c# - 使用 ServiceStack.Text 解析 JSON 时出现问题

.net - F#-解析日期

.net - 将 TaskContinuationOptions 应用于 "step"而不是整个链

python - 捕获 Neo4j 异常

c++ - 如何在 C++ 异常处理中包装我的 C 代码?

c# - "is"表达式的结果在运行时返回 false,但在检查时返回 true

c# - 有多少个时区?

java - 如何更改java标准类抛出的异常消息?

java - 静态变量未初始化时抛出异常

.net - 扩展方法中的 ArgumentNullException 或 NullReferenceException?