Vistaの相対から絶対パスを取得する)(Win32の/シェルPathCombineを使用して失敗しているようです

StackOverflow https://stackoverflow.com/questions/351479

質問

これは、動作やバグや私が使用している間違った機能を目的としているが、問題はPathCombineは、()Vistaのボックスに間違ったパスを返すということであれば、

わからない。

相対パス(プレイリストに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 ディレクトリのパスからファイル一部を除去する。

他のヒント

あなたは2つの文字列を組み合わせると、

は、次の手順を取得ます。

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」)です。

ちょうど「<=>」あなたのケース内のディレクトリ名であると仮定しています。それを取り除く(または別の「<=>」あなたの相対パスの開始時に、ファイル名の部分の剥離のための余分なコードを避けるためにトリックを追加)し、それは大丈夫動作するはずです。

scroll top