合并DirectoryInfo和FileInfo路径

9
如果我有一个绝对的DirectoryInfo路径和一个相对的FileInfo路径,如何将它们合并成为一个绝对的FileInfo路径?
例如:
var absoluteDir = new DirectoryInfo(@"c:\dir");
var relativeFile = new FileInfo(@"subdir\file");
var absoluteFile = new FileInfo(absoluteDir, relativeFile); //-> How to get this done?
4个回答

11
如果 absoluteDir 和 relativeFile 只是为了用来创建 absoluteFile,那么应该只使用普通字符串来表示它们,只将 absoluteFile 作为 FileInfo。
var absoluteDir = @"c:\dir"; 
var relativeFile = @"subdir\file"; 
var absoluteFile = new FileInfo(Path.Combine(absoluteDir, relativeFile)); 

编辑:如果你确实需要它们被打印出来,那么你应该使用 Path.Combine 应用于它们的 OriginalPath,你可以通过以下方式访问它们:

var absoluteDir = new DirectoryInfo(@"c:\dir");
var relativeFile = new FileInfo(@"subdir\file");
var absoluteFile = new FileInfo(Path.Combine(absoluteDir.ToString(), relativeFile.ToString()));

由于 "protected" 的状态,无法直接访问 OriginalPath 属性。


3
谢谢!显然,在.NET类库中没有真正用来封装文件系统路径的类。顺便说一下,你不觉得缺少这样一个类吗? - Dimitri C.
我从不错过课程,但也许可以添加一个构造函数重载,它接受两个或更多的FileSystemInfo(FileInfo和DirectoryInfo的基类)或字符串,使用params关键字。然后构造函数将把它们全部组合起来。 - Alfred Myers
2
我得到了 DirectoryInfo,OriginalPath 不存在的错误。 - jeromej

3
你可以使用FileInfo类的FullPath属性。 FileInfo.FullPath将获取完全限定路径,而 FileInfo.OriginalPath将给出指定的相对路径。
如果你只想将两个路径合并,例如将文件添加到另一个路径的相对路径中,则应该使用Path.Combine(),如先前所述。

0

试试这个:

Path.Combine(absolute, relative);

0

Path.Combine?


1
这对DirectoryInfo和FileInfo起作用,还是只适用于字符串? - Dimitri C.
只有字符串;你不能使用 dir.FullNamefile.FullName 来工作吗? - Rubens Farias

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接