通常,如果您尝试移动到存在的文件,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/