2008-12-04 11 views
12

मैं यूनिकोड फ़ाइल नाम देने वाली फ़ाइलों को खोलने के लिए एक सी लाइब्रेरी में आया था। फ़ाइल खोलने से पहले, यह पहले फ़ाइल नाम को "\\? \" तैयार करके पथ में परिवर्तित करता है। क्या this msdn article प्रति पथ में अनुमत वर्णों की अधिकतम संख्या बढ़ाने के अलावा ऐसा करने का कोई कारण है?विंडोज़ पर, आपको "\\ \" फ़ाइल नाम उपसर्ग का उपयोग कब करना चाहिए?

ऐसा लगता है कि इन "\\? \" पथों को विंडोज एपीआई और मानक पुस्तकालय के यूनिकोड संस्करणों की आवश्यकता होती है।

+0

लंबाई प्रतिबंधों के अतिरिक्त, यह आपको बिना किसी प्रतिबंध के फ़ाइल नामों में अवधि और रिक्त स्थान का उपयोग करने देता है। उदाहरण के लिए, यदि आप चाहते हैं, तो – Antimony

उत्तर

9

हां, यह सिर्फ उस उद्देश्य के लिए है। हालांकि, यदि आप MAX_PATH लंबाई से अधिक पथ बनाने का निर्णय लेते हैं तो आपको संगतता समस्याएं दिखाई देगी। उदाहरण के लिए, एक्सप्लोरर खोल और कमांड प्रॉम्प्ट (कम से कम XP पर, मुझे Vista के बारे में पता नहीं है) उस लंबाई के पथ को संभाल नहीं सकता है और त्रुटियों को वापस कर देगा।

1

मैं 1995 से विंडोज कोड लिख रहा हूं, और हालांकि मुझे उस उपसर्ग के बारे में पता है, मुझे इसका उपयोग करने का कोई कारण नहीं मिला है। MAX_PATH से परे पथ की लंबाई में वृद्धि करना इसके लिए एकमात्र कारण प्रतीत होता है, और न ही मैं और न ही मेरे किसी भी प्रोग्राम के ग्राहकों ने कभी भी मेरे ज्ञान के लिए ऐसा किया है।

3

मुझे लगता है कि पहली बात ध्यान में रखना है कि "\\? \" पथ को यूएनसी पथ नहीं बनाता है। आप दूसरी बार अधिक सटीक थे जब आपने इसे यूएनसी- शैली पथ कहा। लेकिन फिर भी, समानता केवल शुरुआत में दो बैकस्लैश होने से होती है। वास्तव में यूएनसी के साथ कुछ लेना देना नहीं है। यह इस तथ्य से समर्थित है कि आपको "\\? \" उपसर्ग के साथ यूएनसी पथ प्राप्त करने के लिए और भी वर्णों का उपयोग करना होगा।

मुझे लगता है कि आपको उस उपसर्ग का उपयोग करने का पूरा कारण मिला है। यह आपके द्वारा उद्धृत लेख में वर्णित अधिकतम लंबाई सीमा को ले जाता है। और यह केवल यूनिकोड पथ पर लागू होता है; गैर-यूनिकोड पथ उस उपसर्ग का उपयोग करके सीमा से बचने के लिए नहीं मिलता है।

ध्यान देने योग्य एक बात यह है कि उपसर्ग को सापेक्ष पथों के लिए अनुमति नहीं है, केवल पूर्ण लोगों के लिए। आप दोबारा जांचना चाहेंगे कि आपकी सी लाइब्रेरी उस प्रतिबंध को सम्मानित करती है।

5

इस विधि के लिए सबसे अच्छा उपयोग शायद नई फाइलें नहीं बनाना है, लेकिन मौजूदा फ़ाइलों को प्रबंधित करने के लिए, जो किसी और ने बनाया हो।

मैंने एक फ़ाइल सर्वर प्रबंधित किया जो नियमित रूप से path_length > MAX_PATH के साथ फाइलें प्राप्त करेगा। आप देखते हैं, उपयोगकर्ताओं ने फ़ाइलों को H:\myfile.txt के रूप में देखा, लेकिन सर्वर पर यह वास्तव में H:\users\username\myfile.txt था। इसलिए यदि उपयोगकर्ता ने MAX_PATH वर्णों के साथ फ़ाइल बनाई है, तो सर्वर पर यह MAX_PATH+len("users\username") था।

(MAX_PATH वर्णों वाली फ़ाइल बनाना इतना असामान्य नहीं है, क्योंकि जब आप इंटरनेट एक्सप्लोरर पर एक वेब पेज सहेजते हैं तो यह पेज शीर्षक के रूप में पृष्ठ शीर्षक का उपयोग करता है, जो कुछ पृष्ठों के लिए काफी लंबा हो सकता है)।

इसके अलावा, एक मैक या लिनक्स मशीन के साथ एक ड्राइव (नेटवर्क या यूएसबी के माध्यम से) साझा करना, आप स्वयं को con, prn या lpt1 जैसे नामों वाली फाइलों के साथ ढूंढ सकते हैं। और फिर, उपसर्ग आपको और आपकी स्क्रिप्ट उन फ़ाइलों को संभालता है।

+1

सही है, तो आप लम्बाई चेक से अधिक प्रसंस्करण बंद कर देते हैं। (उद्धरण) न्यूनतम संशोधन के साथ सिस्टम को पास किया गया, जिसका अर्थ है कि आप मार्ग विभाजक का प्रतिनिधित्व करने के लिए आगे की स्लैश का उपयोग नहीं कर सकते हैं, या मौजूदा निर्देशिका का प्रतिनिधित्व करने की अवधि या मूल निर्देशिका का प्रतिनिधित्व करने के लिए डबल डॉट्स का उपयोग नहीं कर सकते हैं। क्योंकि आप किसी सापेक्ष पथ के साथ "\\? \" उपसर्ग का उपयोग नहीं कर सकते हैं, सापेक्ष पथ हमेशा MAX_PATH वर्णों तक सीमित होते हैं। (/ उद्धरण) –

3

साथ ही साथ लंबे पथ की अनुमति देने के साथ, "\\? \" उपसर्ग आपको "con" और "aux" जैसी फ़ाइलों और निर्देशिका नामों का उपयोग करने देता है। आम तौर पर विंडोज उन पुराने-पुराने डीओएस उपकरणों के रूप में व्याख्या करेंगे।

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

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