2010-06-01 27 views
8

Làm cách nào tôi có thể chuyển đổi từ tên đường dẫn Unicode (LPWSTR) sang tương đương ASCII? Thư viện được gọi là chỉ hiểu chuỗi c.Làm cách nào để chuyển đổi đường dẫn Unicode thành chuỗi c?

Edit: Được rồi, tôi đã lấy GetShortPathName và những gợi ý WideCharToMultiByte và tạo ra những đoạn mã, tôi thử nghiệm nó với một số thư mục có chứa các ký tự Unicode trong đường dẫn và nó làm việc hoàn hảo:

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

Trả lời

5

GetShortPathName() Chức năng

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

sẽ cung cấp cho bạn một tương đương 8,3 filename, trỏ đến cùng một tập tin, để sử dụng với mã di sản.

[EDIT] Đây có lẽ là cách tốt nhất bạn có thể làm, mặc dù về mặt lý thuyết, tên tệp 8,3 có thể chứa các ký tự không phải ascii, tùy thuộc vào cài đặt đăng ký. Trong trường hợp này, bạn không có một cách dễ dàng để nhận được các char thích hợp *, và GetShortPathNameA() sẽ không làm điều đó hoặc nếu thiết lập mã trong khi tạo tệp không khớp với thiết đặt hiện tại.

Xem http://technet.microsoft.com/en-us/library/cc781607%28WS.10%29.aspx về cài đặt. Có một sự đồng thuận ở đây (xem bên dưới) rằng trường hợp này là hợp lý để bỏ bê.

Cảm ơn Moron, All, vì đã đóng góp cho bài đăng này.

+0

Nhưng cũng không phải là đường dẫn ngắn LPWSTR? Có lẽ OP đang tìm kiếm một cái gì đó như WideCharToMultiByte? –

+0

Tôi thực sự đang tìm kiếm sự kết hợp của cả hai. – metafex

+0

@metafex: Có lẽ bạn nên chỉnh sửa câu hỏi của mình sau đó. Đây là câu trả lời được chấp nhận dường như không có ý nghĩa, với câu hỏi là hiện tại. –

Các vấn đề liên quan