Кажется, что получить абсолютный путь от относительного в Vista не удается с помощью Win32 / Shell PathCombine () - PullRequest
1 голос
/ 09 декабря 2008

Не уверен, является ли это предполагаемым поведением, ошибкой или неправильной функцией, которую я использую, но проблема в том, что 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

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

Ответы [ 2 ]

3 голосов
/ 09 декабря 2008

Документация для PathCombine указывает, что вторым параметром, lpszDir , является «Указатель на завершающуюся нулем строку максимальной длины MAX_PATH, которая содержит путь к каталогу». Похоже, вы передаете полное имя файла внутри каталога, а не полное имя каталога. Поэтому он удаляет три компонента: playlist.wpl, Playlists и Music, а затем добавляет остаток.

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

2 голосов
/ 09 декабря 2008

Когда вы объединяете две строки, вы получаете следующее.

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

...