2017-03-10 33 views
2

WindowsフォームでHelpLabelを使用してHelp.txtファイルを開こうとしています。絶対パスから相対パスに変換することはできません。相対パスを絶対パスに変換する

まず、exeファイルの絶対パスを取得しようとします。どちらが成功したのか。 次に、exeファイルのディレクトリのみを取得します。どちらが成功したのか。 第3に、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に\デバッグ.... \ヘルプ\ HELP.TXT

+0

[PathCanonicalize相当のC#]の複製の可能性があります(http://stackoverflow.com/questions/623333/pathcanonicalize-equivalent-in-c-sharp) –

+0

または[パスと絶対パスを絶対パスで組み合わせる] ://stackoverflow.com/questions/670566/path-combine-absolute-with-relative-path-strings) –

答えて

5

あなたはPath.GetFullPathを使用する必要があります() GetFullPathのMSDNパー

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

を::上位ディレクトリを「../../」を持っているために考慮に入れ、下記を参照してください指定されたパス文字列のための絶対パスを返します。 Path.Combine文字列をパスに結合します。

+0

私のパスには現在無効な文字が含まれています... lol "%" – Philo

+0

パスの値を表示できますか?無効な文字)? exeFileの価値は何ですか? – Frederic

+0

"C:\\ Users \\ .. \\ Visual%20Studio%202015 \\ ..... – Philo

関連する問題