将相对路径转换为绝对路径

6
我正在尝试使用linkLabel在Windows Forms中打开Help.txt文件。但是无法从绝对路径转换为相对路径。
首先,我尝试获取exe文件的绝对路径。这一步成功了。 其次,只获取exe文件的目录。这也成功了。 第三步,我试图将目录与Help.txt文件的相对路径组合起来。但是这一步不成功。
Exe文件位于->\Project\bin\Debug文件夹中,但Help.txt文件位于\Project\Help文件夹中。以下是我的代码:
 string exeFile = (new System.Uri(Assembly.GetEntryAssembly().CodeBase)).AbsolutePath;
 string Dir = Uri.UnescapeDataString(Path.GetDirectoryName(exeFile));
 string path = Path.Combine(Dir, @"..\..\Help\Help.txt");
 System.Diagnostics.Process.Start(path);

我路径的结果是 -> \项目\bin\Debug....\帮助\帮助.txt

可能是PathCanonicalize等效于C#的重复问题。 - John Wu
1个回答

7

您需要使用Path.GetFullPath()函数来考虑上一级目录"../../",请参见以下代码:

string exeFile = new System.Uri(Assembly.GetEntryAssembly().CodeBase).AbsolutePath;
string Dir = Path.GetDirectoryName(exeFile);
string path = Path.GetFullPath(Path.Combine(Dir, @"..\..\Help\Help.txt"));
System.Diagnostics.Process.Start(path);

根据 GetFullPath 的 MSDN 文档:返回指定路径字符串的绝对路径。 而 Path.Combine 则将多个字符串合并为一个路径。

你能展示一下路径的值(包括无效字符)吗?还有exeFile的值是多少? - Frederic
1
Uri.UnescapeDataString - Philo

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