1

これが意図した動作なのか、バグなのか、私が使用している関数が間違っているのかはわかりませんが、問題は、Vista ボックスで PathCombine() が間違ったパスを返すことです。

相対パスは次のとおりです (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

これは既知の問題ですか? 私が使用すべき他の機能はありますか?

4

2 に答える 2

3

PathCombineのドキュメントでは、2 番目のパラメーターlpszDirが「ディレクトリ パスを含む最大長 MAX_PATH の null で終わる文字列へのポインター」であると指定されています。ディレクトリの完全修飾名ではなく、ディレクトリ内のファイルの完全修飾名を渡しているようです。したがって、playlist.wpl、Playlists、および Music の 3 つのコンポーネントが削除され、残りが追加されます。

PathRemoveFileSpecを使用して、ディレクトリ パスからファイル部分を削除できるはずです。

于 2008-12-09T01:20:24.580 に答える
2

2 つの文字列を結合すると、次のようになります。

C:\Users\userX\Music\Playlists\playlist.wpl\..\..\..\Public\Music\Sample Music\Amanda.wma

各 " .." は前のセクションを消去するため、次のシーケンスで u[p を終了します。

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あなたの場合、「」がディレクトリ名であると仮定しているだけです。それを取り除きます (または、相対パスの先頭に別の " " を追加し..ます。これは、ファイル名セクションを取り除くための余分なコードを避けるためのトリックです)。問題なく動作するはずです。

于 2008-12-09T02:32:14.797 に答える