我正在尝试使用System.IO.File.Replace更新文件,如果目标文件位于NAS上,则会抛出System.IOException。
根据MSDN,如果目标文件位于不同的卷上,则此方法会引发异常。这是对的,但我如何检测两个文件是否在“不同的卷”上?
如果我使用驱动器号,映射驱动器或UNC路径指定相同的文件,Path.GetPathRoot将返回不同的字符串。我无法捕获System.IOException,因为在各种情况下抛出它,而不仅仅是文件位于不同的卷上。
答案 0 :(得分:1)
您可以使用“复制”,然后“替换”确保替换始终位于同一卷上。 或者只是抓住错误并尝试一下。
catch IOException
File.Copy( src,dest+".tmp", true )
File.Replace( dest+".tmp", dest, dest_backup )
答案 1 :(得分:0)
如果您有可能将文件放在不同的卷上,最好编写自己的简单复制例程,该例程从一个流中读取并写入另一个流。它处理跨卷副本,允许您捕获可能遇到的其他异常,并且实现起来非常简单。