2017-04-20 6 views
2

私はC#プログラムを持っていますが、相対パス./report/report1.rdlcからファイルを読み込みますが、まったく別の場所からファイルが見つかったという未知の理由がありましたC:\Windows\system32\report\report1.rdlcファイルは実際には場所ですC:\Program Files (x86)\Application1\report\report1.rdlcで、プログラムはC:\Program Files (x86)\Application1\です。相対パスが作業ディレクトリから始まっていない理由は何ですか?C#相対パスが作業ディレクトリから始まっていない

+1

作業ディレクトリは不要です。実行可能バイナリが存在するディレクトリと同じディレクトリです。 – zerkms

+0

「C#プログラム」はどこですか? –

+0

'C:\ Windows \ system32 \ report \'に 'report1.rdlc'を見つけようとしたときに、あなたはどのようにプログラムを起動しましたか?内部のパスが 'C:\ Windows \ system32 \ 'の間に' cmd'コンソールの内部で起動しましたか? – abto

答えて

1

作業ディレクトリから始まります。ただし、特定のIOタスク(たとえば、オープンファイルダイアログまたはDirectory.SetCurrentDirectoryメソッドなど)が実行された場合に変更できるため、作業ディレクトリは使用しないでください。代わりに、AppDomain.CurrentDomain.BaseDirectoryプロパティを使用して、アセンブリファイルが配置されているパスを取得する必要があります。あなたはそのようにこれを使用することができます。

var relativePath = Path.Combine ("report", "report1.rdlc"); 
var baseDirectory = AppDomain.CurrentDomain.BaseDirectory; 
var absolutePath = Path.Combine (baseDirectory, absolutePath); 

今、あなたは、ファイルへのアクセスをabsolutePathで動作するはずです。

関連する問題