2010-06-01 17 views
8

Come posso convertire da un nome di percorso Unicode (LPWSTR) all'equivalente ASCII? La libreria che viene chiamata comprende solo le stringhe.Come posso convertire un percorso Unicode in una stringa c?

Edit: Va bene, ho preso il GetShortPathName e le suggestioni WideCharToMultiByte e ha creato quel pezzo di codice, ho provato con alcune cartelle contenenti caratteri Unicode nel percorso e ha funzionato perfettamente:

wlength = GetShortPathNameW(cpy,0,0); 
LPWSTR shortp = (LPWSTR)calloc(wlength,sizeof(WCHAR)); 
GetShortPathNameW(cpy,shortp,wlength); 
clength = WideCharToMultiByte(CP_OEMCP, WC_NO_BEST_FIT_CHARS, shortp, wlength, 0, 0, 0, 0); 
LPSTR cpath = (LPSTR)calloc(clength,sizeof(CHAR)); 
WideCharToMultiByte(CP_OEMCP, WC_NO_BEST_FIT_CHARS, shortp, wlength, cpath, clength, 0, 0); 

risposta

5

GetShortPathName() Funzione

http://msdn.microsoft.com/en-us/library/aa364989%28VS.85%29.aspx

vi darà un equivalente 8,3 nome del file, indicando lo stesso file, per l'utilizzo con il codice legacy.

[EDIT] Questo è probabilmente il meglio che si possa fare, anche se in teoria i nomi dei file 8.3 possono contenere caratteri non ascii, a seconda delle impostazioni del registro. In questo caso, non hai un modo semplice per ottenere il char corretto * e GetShortPathNameA() non lo farà se l'impostazione della codepage durante la creazione del file non corrisponde alle impostazioni correnti.

Vedere http://technet.microsoft.com/en-us/library/cc781607%28WS.10%29.aspx sull'impostazione. C'è un consenso qui (vedi sotto) che questo caso è ragionevole da trascurare.

Grazie Moron, Tutti, per il contributo a questo post.

+0

Ma il percorso breve non è LPWSTR? Forse OP sta cercando qualcosa come WideCharToMultiByte? –

+0

In realtà sto cercando la combinazione di entrambi. – metafex

+0

@metafex: forse dovresti modificare la tua domanda allora. Questa è la risposta accettata non sembra avere senso, con la domanda di essere ciò che è attualmente. –

Problemi correlati