फसल है I डेल्फी 2010 का उपयोग कर रहा हूं और मेरा प्रोग्राम सिस्टम का अस्थायी पथ प्राप्त करना चाहता है। मैं TPath.GetTempPath का उपयोग कर रहा हूं और सब कुछ ठीक काम कर रहा है ... कम से कम मेरे और मेरे सहकर्मियों के लिए। लेकिन कुछ ग्राहक मशीनों पर यह विधि एक फसल पथ लौटाती है जो (बेशक) मौजूद नहीं है। मुझे पता चला कि यह समस्या GetLongPathName() को अंतर्निहित कॉल का परिणाम प्रतीत होती है।डेल्फी TPath.GetTempPath परिणाम
पूरा कोड इस तरह दिखता है:
[...]
var
TmpDir : String;
Len : Integer;
begin
[... Call to GetTempPath succeeds and we have a valid temp directory in short "~" notation in var TmpDir ...]
Len := GetLongPathName(PChar(TmpDir), nil, 0); // Len = 37
SetLength(TmpDir, Len - 1); // We want to set the len of TmpDir to 37 - 1.
GetLongPathName(PChar(TmpDir), PChar(TmpDir), Len); // Only 32 (instead of 36) characters are copied - so we have a cropped path - But why?!
end;
[...]
यह केवल कुछ सिस्टम पर होता है और मैं पता नहीं क्यों। मुझे इसके लिए एक बुरा कामकाज मिला, लेकिन मैं जानना चाहता हूं कि यहां क्या हो रहा है।
क्या कोई इस पर कुछ प्रकाश डाल सकता है?
क्या आप हमें सही (अपेक्षित) और बुरे (वास्तविक) पथ नामों के उदाहरण दे सकते हैं? क्या यह एक यूनिकोड या एन्कोडिंग मुद्दा हो सकता है? –
हमने सोचा कि यह भी पहले स्थान पर है, लेकिन पथ नामों में कोई वर्ण नहीं है जो यूनिकोड रूपांतरणों के साथ समस्याएं पैदा कर सकता है। GetLongPathName का परिणाम पथ नाम केवल अंतिम 4 वर्ण ("Temp \" का "emp \") गायब है - अन्य सभी वर्ण मान्य हैं। – Patrick
लगता है जैसे http://qc.embarcadero.com/wc/qcmain.aspx?d=92006 –