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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top