.NET Frameworkで相対パスを扱う
最終更新:2010/10/01 作成日:2010/09/25 分類:
ファイル操作
PowerShellで扱っているカレントディレクトリと、.NET Frameworkのカレントディレクトリは一般には一致しません。
PS U:\Work> [IO.Directory]::GetCurrentDirectory()
C:\Users\Hojo
PS U:\Work>
そのため、PowerShellを通して.NET Frameworkの入出力処理をしようとするとパスを誤認してしまいます。下記の例では、PowerShellのカレントディレクトリがU:\Workであるのに、 .NETではC:\Users\Hojo\TestFile.txtを探してしまっています。
PS U:\Work> [IO.File]::OpenRead('.\TestFile.txt')
"1" 個の引数を指定して "OpenRead" を呼び出し中に例外が発生しました: "ファイル 'C:\Users\Hojo\TestFile.txt' が見つかりませんでした。"
発生場所 行:1 文字:20
+ [IO.File]::OpenRead <<<< ('.\TestFile.txt')
+ CategoryInfo : NotSpecified: (:) []、MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodException
PS U:\Work>
PowerShellを通して.NET Frameworkの相対パス処理を行うには、まず.NET Frameworkのカレントディレクトリを変更します。
PS U:\Work> [IO.Directory]::SetCurrentDirectory(
>> (Get-Location).Path)
>>
PS U:\Work> [IO.Directory]::GetCurrentDirectory()
U:\Work
PS U:\Work>
これで相対パスを正しく扱えるようになります。