如何检测两个文件是否在同一“卷”上?

时间:2008-11-28 21:02:26

标签: .net windows

我正在尝试使用System.IO.File.Replace更新文件,如果目标文件位于NAS上,则会抛出System.IOException。

根据MSDN,如果目标文件位于不同的卷上,则此方法会引发异常。这是对的,但我如何检测两个文件是否在“不同的卷”上?

如果我使用驱动器号,映射驱动器或UNC路径指定相同的文件,Path.GetPathRoot将返回不同的字符串。我无法捕获System.IOException,因为在各种情况下抛出它,而不仅仅是文件位于不同的卷上。

2 个答案:

答案 0 :(得分:1)

您可以使用“复制”,然后“替换”确保替换始终位于同一卷上。 或者只是抓住错误并尝试一下。

catch IOException
  File.Copy( src,dest+".tmp", true )
 File.Replace( dest+".tmp", dest, dest_backup )

答案 1 :(得分:0)

如果您有可能将文件放在不同的卷上,最好编写自己的简单复制例程,该例程从一个流中读取并写入另一个流。它处理跨卷副本,允许您捕获可能遇到的其他异常,并且实现起来非常简单。