Vistaの相対から絶対パスを取得する)(Win32の/シェルPathCombineを使用して失敗しているようです
-
20-08-2019 - |
質問
わからない。
相対パス(プレイリストにWMPによってエクスポートされる)である:
..\..\..\Public\Music\Sample Music\Amanda.wma
それはへの相対だパスは次のとおりです。
C:\Users\userX\Music\Playlists\playlist.wpl
とPathCombine()戻り値:
C:\Users\userX\Public\Music\Sample Music\Amanda.wma
しかし、ファイルが実際にここにあります(エクスプローラと私はコードからそれを開くことができないという事実から判断)
C:\Users\Public\Music\Sample Music\Amanda.wma
これは既知の問題ですか?私が使用してしなければならない他のいくつかの機能がありますか?
解決
PathCombine のドキュメントがあることを指定します第二のパラメータ、 lpszDir は、「ディレクトリパスが含まれている最大長MAX_PATHのヌル終了文字列へのポインタ」です。あなたは、ディレクトリの完全修飾名の代わりに、ディレクトリ内のファイルの完全修飾名を渡すように見えます。だから、それは、次の3つのコンポーネント削除します。playlist.wpl、プレイリスト、および音楽を、その後、残りを追加
あなたは PathRemoveFileSpec ディレクトリのパスからファイル一部を除去する。
他のヒント
は、次の手順を取得ます。
C:\Users\userX\Music\Playlists\playlist.wpl\..\..\..\Public\Music\Sample Music\Amanda.wma
:各「..
」は、前のセクションを一掃しますので、は、[次の順序でpはUを終了します
C:\Users\userX\Music\Playlists\playlist.wpl\..\..\..\Public\Music\Sample Music\Amanda.wma
C:\Users\userX\Music\Playlists\..\..\Public\Music\Sample Music\Amanda.wma
C:\Users\userX\Music\..\Public\Music\Sample Music\Amanda.wma
C:\Users\userX\Public\Music\Sample Music\Amanda.wma
あなたのパスのいずれかのセグメントがファイルまたはディレクトリであるかどうかに悩まされていないため、「PathCombine()
」です。これは、これらの特別なナビゲーション文字なしでパスを形成するために、実際のナビゲーションセグメントに対してだけで比較的ダムの特殊ナビゲーション文字のマッチングの方法(「.
を」と「playlist.wpl
」)です。
ちょうど「<=>」あなたのケース内のディレクトリ名であると仮定しています。それを取り除く(または別の「<=>」あなたの相対パスの開始時に、ファイル名の部分の剥離のための余分なコードを避けるためにトリックを追加)し、それは大丈夫動作するはずです。