2008-12-09 4 views
1

Не уверен, что это предполагаемое поведение или ошибка или неправильная функция, которую я использую, но проблема в том, что PathCombine() возвращает неправильный путь в окне Vista.Получение абсолютного пути от относительного в Vista кажется неудачным с использованием Win32/Shell 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

Это известная проблема? Есть ли какая-то другая функция, которую я должен использовать?

ответ

3

documentation for PathCombine указывает, что второй параметр, lpszDir, является «Указатель на строку с нулевым символом максимальной длины MAX_PATH, которая содержит путь к каталогу.» Кажется, вы передаете полное имя файла внутри каталога, а не полное имя каталога. Таким образом, он удаляет три компонента: playlist.wpl, плейлисты и музыку, а затем добавляет остаток.

Вы должны использовать PathRemoveFileSpec, чтобы удалить часть файла из пути к каталогу.

+0

Хм, я попробую это - спасибо. – dennisV 2008-12-09 01:21:58

2

При объединении двух строк вы получаете следующее.

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

Поскольку каждый «..» сотрет предыдущий раздел, вы в конечном и [р со следующей последовательностью:

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» - это имя каталога в вашем случае. Сбросьте это (или добавьте еще один «..» в начале вашего относительного пути, трюк, чтобы избежать постороннего кода для снятия раздела с именем файла), и он должен работать нормально.