2010-06-01 16 views
8

मैं यूनिकोड पथ नाम (एलपीडब्लूस्ट्र) से ASCII समकक्ष में कैसे परिवर्तित कर सकता हूं? लाइब्रेरी जिसे बुलाया जाता है केवल सी स्ट्रिंग को समझता है।मैं एक यूनिकोड पथ को सी स्ट्रिंग में कैसे परिवर्तित कर सकता हूं?

संपादित करें: ठीक है, मैं GetShortPathName और WideCharToMultiByte सुझावों को समझा और कोड के उस टुकड़े बनाया, मुझे कुछ रास्ते में यूनिकोड वर्ण युक्त फ़ोल्डरों के साथ यह परीक्षण किया है और यह दोषरहित काम किया:

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

उत्तर

5

GetShortPathName() समारोह

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

आप एक बराबर 8.3 फ़ाइल नाम देंगे, एक ही फाइल की ओर इशारा करते, विरासत कोड के साथ प्रयोग के लिए।

[संपादित करें] यह शायद सबसे अच्छा है जो आप कर सकते हैं, हालांकि सैद्धांतिक रूप से 8.3 फ़ाइल नामों में रजिस्ट्री सेटिंग के आधार पर गैर-असीसी वर्ण हो सकते हैं। इस मामले में, आपके पास उचित char * प्राप्त करने का कोई आसान तरीका नहीं है, और GetShortPathNameA() ऐसा नहीं करेगा, अगर फ़ाइल निर्माण के दौरान कोडपृष्ठ सेटिंग वर्तमान सेटिंग से मेल नहीं खाती है।

सेटिंग के बारे में http://technet.microsoft.com/en-us/library/cc781607%28WS.10%29.aspx देखें। यहां एक सहमति है (नीचे देखें) कि यह मामला उपेक्षित करने के लिए उचित है।

धन्यवाद इस पोस्ट में योगदान के लिए मॉरॉन, सभी।

+0

लेकिन क्या एलपीडब्ल्यूआरटी भी छोटा रास्ता नहीं है? शायद ओपी WideCharToMultiByte की तरह कुछ ढूंढ रहा है? –

+0

मैं वास्तव में उन दोनों के संयोजन की तलाश में हूं। – metafex

+0

@ मेटाफेक्स: शायद आपको अपना प्रश्न तब संपादित करना चाहिए। यह स्वीकार किया जाने वाला उत्तर समझ में नहीं आता है, सवाल यह है कि वर्तमान में यह क्या है। –

संबंधित मुद्दे

 संबंधित मुद्दे