2010-12-06 43 views
1

如何将驱动器相对路径(如D:test.xml)转换为函数(如XDocument.Load())的绝对路径将接受。例如,D驱动器可以将D:\ data作为其当前工作目录,因此D:test.xml将表示D:\ data \ test.xml。我已经尝试了D:。\ test.xml这样的混合体。将包含驱动器号的相对路径转换为.NET文件函数的绝对路径

这是我得到的东西,像d错误:的test.xml无效的URI:一个DOS路径必须扎根,例如, 'C:\'

回答

4

你可以使用GetFullPath。例如:

// should return "D:\data\test.xml" if the current working dir is "D:\data" 
string absolutePath = Path.GetFullPath("D:test.xml"); 
+0

如果CWD是“D:\ Data”,则Path.GetFullPath(“D:test.xml”)确实会返回“D:\ data \ test.xml”,因为它会直接获得完整路径为“test.xml”。但是,如果使用与用于CWD的驱动器号不同的驱动器号,结果将不一致。例如,Path.GetFullPath(“C:test.xml”)将返回“C:\ test.xml”。你知道为什么GetFullPath会以这种方式工作吗?是通过设计还是意外? – 2010-12-06 22:03:44

+0

@弗洛林:这是设计。看看http://msdn.microsoft.com/en-us/library/aa365247.aspx#fully_qualified_vs._relative_paths。最近Raymond Chen的一篇文章解释了这些看似奇怪的设计决定背后的一些历史:http://blogs.msdn.com/b/oldnewthing/archive/2010/10/11/10073890.aspx – LukeH 2010-12-07 10:02:14

2

您应该简单地使用“test.xml”作为相对路径,并且如果当前文件夹是“D:\ data”,则完整路径将被解析为“D:\ Data \ test.xml”。这也在Load()方法的MSDN示例中说明:http://msdn.microsoft.com/en-us/library/bb343181.aspx

请注意“driveLetter:fileName”不是.Net中的相对路径。 (请阅读更新)

可以使用Path.GetFullPath()转换相对路径到一个完整的路径,但你没有这样做XDocument.Load(),因为它也将接受相对路径。

更新 LukeH,感谢您指出了这一点! “driveLetter:fileName”由Path.GetFullPath()接受,并按照指定的here指定为指定驱动器当前目录的相对路径。

驱动器级别当前目录的概念是从DOS旧时代继承而来的。不一定是我将构建现代应用程序的功能。

相关问题