2010-06-01 35 views
8

Unicode yol adından (LPWSTR) ASCII eşdeğerine nasıl dönüştürebilirim? Çağırılan kütüphane sadece c dizeleri anlar.Unicode yolunu bir c dizesine nasıl dönüştürebilirim?

Düzenleme: Tamam, ben yolda Unicode karakterleri içeren bazı klasörlerin ile test edilmiş ve sorunsuz çalıştı, GetShortPathName ve WideCharToMultiByte önerilerini aldı ve kod parçası oluşturuldu:

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); 

cevap

5

GetShortPathName() İşlevini

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

eski kod ile kullanılmak üzere, aynı dosyayı işaret, size eşdeğer 8.3 dosya adı verecek.

[EDIT] Bu, teorik olarak 8.3 dosya adlarının kayıt ayarlarına bağlı olarak ascii olmayan karakterler içerebilse de, muhtemelen yapabileceğiniz en iyisidir. Bu durumda, uygun char * almanın kolay bir yolu yoktur ve GetShortPathNameA(), dosya oluşturma sırasında kod sayfası ayarı geçerli ayarlarla eşleşmezse bunu yapmayacaktır.

Ayar hakkında http://technet.microsoft.com/en-us/library/cc781607%28WS.10%29.aspx adresine bakın. Burada, bu davanın ihmal edilmesinin makul olduğu konusunda bir fikir birliği var (aşağıya bakınız).

Teşekkürler Moron, Hepsi, bu yazıya katkı için.

+0

Ama kısa yol da LPWSTR değil mi? Belki OP, WideCharToMultiByte gibi bir şey mi arıyor? –

+0

Aslında ikisinin kombinasyonunu arıyorum. – metafex

+0

@metafex: Belki sorunuzu sonra düzenlemelisiniz. Bu kabul edilen cevap, şu anda ne olduğu sorusu ile mantıklı görünmüyor. –

İlgili konular