1

不确定这是我正在使用的预期行为还是错误或错误的功能,但问题是 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

这是一个已知的问题?我应该使用其他功能吗?

4

2 回答 2

3

PathCombine的文档指定第二个参数lpszDir是“指向包含目录路径的最大长度 MAX_PATH 的以空字符结尾的字符串的指针”。您似乎在目录中传递文件的完全限定名,而不是目录的完全限定名。因此,它删除了三个组件:playlist.wpl、播放列表和音乐,然后附加其余部分。

您应该能够使用PathRemoveFileSpec从目录路径中删除文件部分。

于 2008-12-09T01:20:24.580 回答
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 回答