जबकि NTFS कुछ 32,000 वर्णों को लंबा करने की अनुमति देता है, आपको Win32 API की 259-वर्ण पथ लंबाई सीमा मिल गई है ।
विंडोज एपीआई में ([जुड़े दस्तावेज़ में चर्चा की गई कुछ अपवादों के साथ), एक पथ के लिए अधिकतम लंबाई है MAX_PATH
, जिसे 260 वर्णों के रूप में परिभाषित किया गया है।
(इसके अतिरिक्त एक NULL
टर्मिनेशन कैरेक्टर भी है, जो हमें 259 उपयोगी किरदार देता है।
क्योंकि एक्सप्लोरर (और लगभग सभी अन्य विंडोज ऐप्स) फाइल सिस्टम एक्सेस के लिए Win32 एपीआई पर भरोसा करते हैं, यह संभव होने के बावजूद इस सीमा के आसपास प्राप्त करना व्यावहारिक नहीं है :
विंडोज एपीआई में कई कार्य हैं जिनमें 32,767 वर्णों की अधिकतम पथ लंबाई के लिए विस्तारित-लंबाई पथ की अनुमति देने के लिए यूनिकोड संस्करण भी हैं। इस प्रकार का पथ बैकस्लैश द्वारा अलग किए गए घटकों से बना है, प्रत्येक फ़ंक्शन के lpMaximumComponentLength
पैरामीटर में दिए गए GetVolumeInformation
मान तक (यह मान आमतौर पर 255 वर्ण है)। विस्तारित-लंबाई पथ निर्दिष्ट करने के लिए, "\\? \" उपसर्ग का उपयोग करें। उदाहरण के लिए, "\\? \ D: \ बहुत लंबा रास्ता "।
दुर्भाग्य से, आप \\?\D:\very long path
किसी एक्सप्लोरर विंडो में टाइप नहीं कर सकते । एप्लिकेशन को इन एपीआई का लाभ उठाने और बहुत लंबे पथ नामों को संभालने के लिए डिज़ाइन किया जाना चाहिए।
विंडोज के तहत विस्तारित-लंबाई वाले रास्तों तक पहुंचने का एक तरीका सिगविन , विंडोज के लिए एक * निक्स इम्यूलेशन परत स्थापित करना है । मेरे परीक्षण में, साइग्विन द्वारा सीमित होना प्रकट नहीं होता है MAX_PATH
; बैश और vi को 2,000 वर्णों वाले रास्तों की कोई समस्या नहीं थी।
ध्यान रखें कि भले ही आप विस्तारित लंबाई वाले पथों को ब्राउज़ करने के लिए बैश का उपयोग कर सकते हैं, आप शायद उन पथों में नियमित रूप से विंडोज अनुप्रयोगों में फाइलें नहीं खोल पाएंगे। उदाहरण के लिए, टाइपिंग notepad
करते समय कार्य निर्देशिका एक विस्तारित-लंबाई पथ आपको मिलती है
त्रुटि: Win32 वर्किंग डायरेक्टरी के लिए वर्तमान वर्किंग डाइरेक्टरी की अनुमति से अधिक लंबा रास्ता है। यहां से देशी विंडोज एप्लिकेशन शुरू नहीं किया जा सकता है।
और कोशिश notepad "\\?\D:\very long path\file.txt"
करना या तो काम नहीं करता; यह लॉन्च होता है, लेकिन बस कहता है "फ़ाइल नहीं मिल रही है ..." नोटपैड ++ के साथ एक ही कोशिश करने से यह दुर्घटनाग्रस्त हो जाता है। (संभवतः एक बफर अतिप्रवाह।)
एक विस्तारित-लंबाई पथ के भीतर गहरे दफन विशिष्ट फ़ाइलों तक पहुँचने के लिए आपका अन्य विकल्प NTFS जंक्शन बिंदु बनाकर स्वयं पथ को छोटा करना है । एक उन्नत कमांड प्रॉम्प्ट से:
D:\> mklink /J jct "\\?\D:\very\long\path"
अब आप की सामग्री का उपयोग कर सकते हैं D:\very\long\path\
से D:\jct\
। आप किसी भी पथ लंबाई समस्याओं को नहीं मारेंगे क्योंकि जहां तक एक्सप्लोरर और अन्य एप्लिकेशन का संबंध है, पथ सिर्फ D:\jct\
(या जो भी) है। NTFS ड्राइवर पारदर्शी तरीके से पथ ("रेपर बिंदु") को पुनर्निर्देशित करता है।
इस दृष्टिकोण के नकारात्मक पक्ष स्पष्ट रूप से यह है कि आपको उस फ़ाइल के पास एक जंक्शन बनाना होगा जिसे आप एक्सेस करना चाहते हैं; आप अभी भी पूरी निर्देशिका संरचना को ब्राउज़ नहीं कर सकते हैं।
विशेष वर्णों के बारे में ( " * : < > ? \ |
), यह केवल एक नहीं है। उन वर्णों का विंडोज के भीतर विशेष अर्थ है, इसलिए उन्हें रास्तों के भीतर उपयोग करना संभव नहीं है। (साइगविन आपको विशेष वर्णों के साथ फाइल बनाने की अनुमति देता है, लेकिन यह विशेष यूनिकोड वर्णों के साथ वर्णों को प्रतिस्थापित करके ऐसा करता है , जो तब पढ़ते समय वापस प्रतिस्थापित करता है। इन सिगविन-निर्मित फ़ाइलों को लिनक्स के नीचे या एक्सप्लोरर में देखना सही नहीं लगेगा, क्योंकि यूनिकोड वर्णों को वापस प्रतिस्थापित नहीं किया जाएगा।)
उस सब ने कहा, तुम क्या कर रहे हो जिसके लिए बहुत लंबे रास्ते चाहिए? शायद आप अपने जीवन को आसान बना सकते हैं, जो आप कर रहे हैं और लंबे रास्तों से बचकर पुनर्मूल्यांकन कर सकते हैं। संभावना है, आपको वैसे भी लंबे समय तक पथ की आवश्यकता नहीं है ।