Obtendo o caminho absoluto de parente em Vista parece falhar usando o Win32 / Shell PathCombine ()
-
20-08-2019 - |
Pergunta
Não sei se isso é o comportamento desejado ou um bug ou uma função de errado que eu estou usando, mas o problema é que PathCombine () retorna um caminho errado em uma caixa Vista.
O caminho é relativa (como exportados pelo WMP para uma lista de reprodução):
..\..\..\Public\Music\Sample Music\Amanda.wma
O caminho é em relação ao é:
C:\Users\userX\Music\Playlists\playlist.wpl
e PathCombine () retorna:
C:\Users\userX\Public\Music\Sample Music\Amanda.wma
No entanto, o arquivo está realmente localizado aqui (a julgar pelo Explorer e o fato de que eu não posso abri-lo a partir do código):
C:\Users\Public\Music\Sample Music\Amanda.wma
Este é um problema conhecido? Existe alguma outra função que eu deveria estar usando?
Solução
O documentação para PathCombine especifica que o segundo parâmetro, lpszDir , é "um ponteiro para uma string terminada em null de MAX_PATH de comprimento máximo que contém o caminho do diretório." Você parece estar passando o nome totalmente qualificado de um arquivo dentro do diretório, em vez do nome totalmente qualificado do diretório. Assim, ele remove três componentes: playlist.wpl, Playlists, e música, e em seguida, acrescenta o restante
.Você deve ser capaz de usar PathRemoveFileSpec para remover a parte arquivo do seu caminho de diretório.
Outras dicas
Quando você combina suas duas seqüências, você começa o seguinte.
C:\Users\userX\Music\Playlists\playlist.wpl\..\..\..\Public\Music\Sample Music\Amanda.wma
Uma vez que cada "..
" vai acabar com a seção anterior, você acaba u [p com a sequência seguinte:
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
Isso porque "PathCombine()
" não é incomodado pelo fato de todos os segmentos do seu caminho são arquivos ou diretórios. É apenas uma maneira relativamente mudo de combinar caracteres especiais de navegação ( "..
" e ".
") contra segmentos de navegação reais para formar um caminho sem esses caracteres especiais de navegação.
É apenas assumindo que "playlist.wpl
" é um nome de diretório no seu caso. Faixa que off (ou adicionar outro "..
" no início de seu caminho relativo, um truque para evitar código estranho para remoção da seção filename) e ele deve funcionar bem.