6

I am trying to open a Help.txt file in windows Forms using a linkLabel. However unable to convert from absolute to relative path.

First, I try to get the absolute path of the exe file. Which is successful. Second, get only directory of the exe file. Which is successful. Third, I am trying to combine the directory with the relative path of the Help.txt file. Which is unsuccessful.

Exe file lives in -> \Project\bin\Debug folder, However the Help.txt file lives in \Project\Help folder. This is my code:-

 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);

The result of my path is -> \Project\bin\Debug....\Help\Help.txt

Philo
  • 1,931
  • 12
  • 39
  • 77
  • Possible duplicate of [PathCanonicalize equivalent in C#](http://stackoverflow.com/questions/623333/pathcanonicalize-equivalent-in-c-sharp) – John Wu Mar 10 '17 at 22:36
  • Or perhaps see [path combine absolute with relative path strings](http://stackoverflow.com/questions/670566/path-combine-absolute-with-relative-path-strings) – John Wu Mar 10 '17 at 22:37

1 Answers1

7

You need to use Path.GetFullPath() to have the upper directory "../../" taken into account, see below :

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);

Per the MSDN of GetFullPath : Returns the absolute path for the specified path string. Whereas Path.Combine Combines strings into a path.

Frederic
  • 2,015
  • 4
  • 20
  • 37