2

この質問は以前に尋ねられましたが、正確な解決策が見えないようです。相対パスを使用しているファイル内のいくつかのリンクをたどり、それらが存在するファイルにリンクしているかどうかを確認する必要があります。次のファイルとフォルダーがあるとします。

C:\Level 1\Level 2\A.txt
C:\Level 1\B.txt

A.txt には、相対パスを使用して B.txt にリンクするリンクがある場合があります..\B.txt

B.txt の存在を確認できるように、現在のトラバース ディレクトリを取得します。これをC:\Level 1\Level 2と組み合わせる必要があります。..\B.txtC:\Level 1\B.txt

Path.Combine を使用してみましたが、うまくいきませんでした。他の考えはありますか?のような複数のレベルをサポートできる必要があります..\..\..\D.txt

4

1 に答える 1

6

Path.Combine は "." で正常に動作するはずです。および「..」相対パス。path1 = "C:\Level 1\Level 2" と path2 = "..\B.txt" の 2 つの文字列があり、Path.Combine(path1, path2) を呼び出すと、返される文字列は "C :\Level 1\Level 2\..\B.txt"、.NET のパスとして機能します。次に、その文字列を取得して File.Exists を呼び出して、結合されたパスにファイルが存在するかどうかを確認できます。

Path.Combine の出力の相対パス コンポーネント ".." を解決したい場合は、Path.Combine から初期出力を取得し、それを Path.GetFullPath に渡すと、適切な絶対パスに変換されます。File.Exist はどちらの形式も受け入れます。何らかの理由で受け入れられない場合は、Path.Combine に渡されるパスに問題がある可能性があります。その場合は、デバッガーでそれらを調べて、何が起こっているかを確認します。

于 2013-07-19T04:21:56.537 に答える