Domanda

Non sono sicuro se si tratti di un comportamento previsto o di un bug o di una funzione errata che sto utilizzando, ma il problema è che PathCombine () restituisce un percorso errato su una finestra di Vista.

Il percorso relativo è (come esportato dal WMP in una playlist):

..\..\..\Public\Music\Sample Music\Amanda.wma

Il percorso relativo è:

C:\Users\userX\Music\Playlists\playlist.wpl

e PathCombine () restituiscono:

C:\Users\userX\Public\Music\Sample Music\Amanda.wma

tuttavia, il file si trova effettivamente qui (a giudicare da Explorer e dal fatto che non riesco ad aprirlo dal codice):

C:\Users\Public\Music\Sample Music\Amanda.wma

È un problema noto? C'è qualche altra funzione che dovrei usare?

È stato utile?

Soluzione

La documentazione per PathCombine specifica che il secondo parametro, lpszDir , è " Un puntatore a una stringa con terminazione null di lunghezza massima MAX_PATH che contiene il percorso della directory. " Sembra che passi il nome completo di un file all'interno della directory, anziché il nome completo della directory. Quindi, rimuove tre componenti: playlist.wpl, playlist e musica, quindi aggiunge il resto.

Dovresti essere in grado di utilizzare PathRemoveFileSpec per rimuovere la parte del file dal percorso della directory.

Altri suggerimenti

Quando si combinano le due stringhe, si ottiene quanto segue.

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

Poiché ogni " .. " cancellerà la sezione precedente, finirai u [p con la seguente sequenza:

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

Questo perché " PathCombine() " non è infastidito dal fatto che alcuni segmenti del tuo percorso siano file o directory. È solo un modo relativamente stupido di abbinare caratteri di navigazione speciali (& Quot; . & Quot; e & Quot; playlist.wpl & Quot;) con segmenti di navigazione reali per formare un percorso senza quelli caratteri di navigazione speciali.

Sta solo supponendo che " <=> " è un nome di directory nel tuo caso. Rimuovi (o aggiungi un altro & Quot; <=> & Quot; all'inizio del percorso relativo, un trucco per evitare il codice estraneo per lo stripping della sezione del nome file) e dovrebbe funzionare bene.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top