NTFS (Windows XP और Windows Vista) में अधिकतम फ़ाइल नाम लंबाई?


260

मैं एक डेटाबेस तालिका तैयार कर रहा हूं, जो अपलोड की गई फ़ाइलों के फ़ाइलनाम को पकड़ लेगी। Windows XP या Vista द्वारा उपयोग किए गए NTFS में फ़ाइल नाम की अधिकतम लंबाई क्या है?


83
मैंने इतने अलग-अलग उत्तर कभी नहीं देखे हैं कि एक सरल प्रश्न क्या होना चाहिए। 199, 255, 256, 257, 260, 'लगभग 30 000', 'लगभग 32 000', और 'यह निर्भर करता है'। निश्चित रूप से, क्वालीफायर हैं, लेकिन ये सब सही नहीं हो सकते हैं?
बिना शर्त ReinstateMonica

7
इसकी 255, मुझे यह पता है क्योंकि मुझे कॉर्पोरेट उपयोगकर्ताओं को इसे तक पहुंचने से रोकने के लिए एक एप्लिकेशन का निर्माण करना था, क्योंकि यह हमारे स्टोरेज सर्वर पर मुद्दों का कारण बनता है।
राबर्टपिट

2
@RobertPitt। आपको वहां कुछ याद आ रहा है। MSDN से उद्धरण: "एक पथ की अधिकतम लंबाई MAX_PATH है, जिसे 260 वर्णों के रूप में परिभाषित किया गया है"
माइकल ओलेसेन

7
@ Michael9000। मेरा मानना ​​है कि रॉबर्टपिट फ़ाइल नाम सीमा को उद्धृत कर रहा था (जो कि यह सवाल क्या है), न कि पथ सीमा।
gdw2

7
NTFS अधिकतम MAX_PATH तक सीमित नहीं है, Windows शेल MAX_PATH तक सीमित है, NTFS अधिकतम पथ की लंबाई 32k है
paulm

जवाबों:


286

फ़ाइल नाम के व्यक्तिगत घटक (यानी पथ के साथ प्रत्येक उपनिर्देशिका, और अंतिम फ़ाइल नाम) 255 वर्णों तक सीमित हैं, और कुल पथ लंबाई लगभग 32,000 वर्णों तक सीमित है।

हालाँकि, Windows पर, आप MAX_PATHमान (फ़ाइलों के लिए 259 वर्ण, फ़ोल्डर्स के लिए 248) से अधिक नहीं हो सकते । देखपूर्ण विवरण के लिए http://msdn.microsoft.com/en-us/library/aa365247.aspx


4
यहां कुछ और तथ्य दिए गए हैं जो इस उत्तर की पुष्टि करते हैं (विंडोज़ सामान्य रूप से 260 वर्णों तक सीमित है): msdn.microsoft.com/en-us/library/… और blogs.msdn.com/b/bclteam/archive/2007/02/13 /…
माइकल ओलेसेन

62
NTFS के लिए सही, विंडोज के लिए सही नहीं, आपके द्वारा दिए गए लिंक के अनुसार: "विंडोज एपीआई में (निम्नलिखित पैराग्राफ में चर्चा किए गए कुछ अपवादों के साथ), एक पथ के लिए अधिकतम लंबाई MAX_PATH है, जिसे 260 वर्णों के रूप में परिभाषित किया गया है"। कुल पथ, सभी व्यावहारिक प्रयोजनों, 259 अक्षरों तक सीमित करने के लिए (शून्य-टर्मिनेटर के लिए अनुमति) है।
लॉरेंस डॉल

9
जाहिरा तौर पर यदि आप विंडोज एपीआई फ़ाइल विधियों के "यूनिकोड संस्करण" का उपयोग करते हैं, तो आप 32767 तक प्राप्त कर सकते हैं यदि आप "\\? \" के साथ पथनाम उपसर्ग करें तो सही है?
रोज़गारपैक

6
@rogerdpack: पूर्ण पथ के लिए, हाँ, लेकिन प्रत्येक व्यक्तिगत घटक (सबफ़ोल्डर / अंतिम-फ़ाइल) में 255 utf-16 कोड बिंदुओं की सीमा होती है। इसके अलावा, सामान्य सॉफ़्टवेयर MAX_PATH की अपेक्षा करता है, इसलिए ... बूम :)
स्नोमार्क

5
विंडोज 10 (संस्करण 1607 - वर्षगांठ अपडेट) और विंडोज सर्वर 2016 में आपको एक समूह नीति प्रविष्टि को अनदेखा करके MAX_PATH समस्या को अनदेखा करने का विकल्प दिया जाता है, जिससे NTFS कंप्यूटर कॉन्फ़िगरेशन के तहत लंबे रास्तों को सक्षम करता है -> व्यवस्थापक टेम्पलेट -> सिस्टम>> फ़ाइल सिस्टम:
स्टीवन मार्क फोर्ड

28

यह 257 अक्षर है। सटीक होने के लिए: एनटीएफएस स्वयं कई हजार अक्षरों की अधिकतम फ़ाइल नाम-लंबाई (लगभग 30'000 कुछ) लगाता है। हालाँकि, Windows पथ + फ़ाइल नाम के लिए 260 अधिकतम लंबाई लगाता है। ड्राइव + फ़ोल्डर में कम से कम 3 वर्ण होते हैं, इसलिए आप 257 से समाप्त होते हैं।


21
गलत - एनयूएल टर्मिनेटर MAX_PATH का हिस्सा है, जो आपको अधिकतम 256 वर्णों का पथ देता है (जो आप 255 के व्यक्तिगत-घटक सीमा के कारण नहीं बना पाएंगे)।
स्नोमार्क

4
"जो आप 255 के व्यक्तिगत-घटक सीमा के कारण नहीं बना पाएंगे" गलत। हम यहां अधिकतम पथ लंबाई के बारे में बात कर रहे हैं, अधिकतम पथ पथ लंबाई नहीं। इसके अलावा "जब एक निर्देशिका बनाने के लिए एपीआई का उपयोग किया जाता है, तो निर्दिष्ट पथ इतना लंबा नहीं हो सकता है कि आप 8.3 फ़ाइल नाम को जोड़ न सकें (अर्थात, निर्देशिका का नाम MAX_PATH माइनस 12 से अधिक नहीं हो सकता)।"
लुडोविक क्रूट

यह बहस केवल इसलिए रुक जाती है क्योंकि निम्न-स्तर का एपीआई 256 वर्णों के फ़ाइलनाम के निर्माण की अनुमति देता है, इस धारणा पर कि 256 char एक अशक्त है, लेकिन फ़ाइल मूल अनुप्रयोगों के लिए अप्राप्य (छिपी हुई) हो जाती है, इसलिए आम तौर पर उपयोगी नहीं होती है।
कॉनराड बी

1
@LudovicKuty: वास्तव में ओपी फ़ाइल नाम लंबाई सीमा के बारे में बात कर रहा था , न कि पथ लंबाई (हाँ, मूल संशोधन में भी, मैंने जाँच की)। और s / वह बहुत विशेष रूप से NTFS सीमाओं का उल्लेख कर रहा था और ओएस की सीमाओं के लिए नहीं, एक विशेष उप-प्रणाली या एपीआई या रूपरेखा।
0xC0000022L

@ 0xC0000022L वास्तव में हाँ। मैंने इसे ओपी प्रश्न में गलत बताया और उन टिप्पणियों पर ध्यान केंद्रित किया जो फ़ाइल नाम लंबाई और पथ लंबाई के बारे में बात करते हैं।
लुडोविक क्रूट

27

जब फ़ाइल को लंबे फ़ाइल नाम से सहेजने का प्रयास किया जाता है, तो फ्रेमवर्क 4.5 पर यह "अनहैंड्ड अपवाद" कहा जाता है:

निर्दिष्ट पथ, फ़ाइल नाम या दोनों बहुत लंबे हैं। पूरी तरह से योग्य फ़ाइल नाम 260 से कम वर्णों का होना चाहिए , और निर्देशिका नाम 248 वर्णों से कम होना चाहिए ।

स्क्रीनशॉट


16

Windows XP NTFS पर 199, मैंने अभी जाँच की है।

यह सिद्धांत नहीं है, बल्कि मेरे लैपटॉप पर कोशिश करने से है। वहाँ शमन प्रभाव हो सकता है, लेकिन यह शारीरिक रूप से मुझे इसे बड़ा नहीं बनाने देगा।

वहाँ कुछ अन्य सेटिंग यह सीमित है, मुझे आश्चर्य है? इसे अपने लिए आजमाएं।


1
XP के मेरे संस्करण पर इस बात की पुष्टि की, क्या दर्द है
जूलियन यंग

मैंने एक विंडोज एक्सपी पर ठीक उसी तरह किया जैसे कि गिगल्स के लिए। मैंने २०० पात्रों पर एक सीमा लगाई। फिर मैंने सिर्फ 255 बार एक फाइल बनाई w, उसको डिलीट किया और विंडोज 7 x64 पर उसी नाम से एक फोल्डर बनाया। अब सवाल यह है कि यहाँ सीमित कारक क्या है: NTFS संस्करण, OS या सबसिस्टम या XP में Win32 API?
0xC0000022L

खोजकर्ता में 200-वर्ण की सीमा लगती है। अन्य कार्यक्रम लंबे फ़ाइल नाम बना सकते हैं। यह शायद उपयोगकर्ता को उसके / उसके स्वयं को बचाने के लिए एक जानबूझकर सीमा है। :-)
avl_sweden

13

MSDN के अनुसार , यह 260 वर्ण है। इसमें शामिल है "<NUL>"-अदृश्य टर्मिनेटिंग अशक्त चरित्र, इसलिए वास्तविक लंबाई 259 है।

लेकिन लेख पढ़ें, यह थोड़ा अधिक जटिल है।


1
दरअसल, संदर्भित MSDN आलेख कहता है कि पथ 260 वर्णों तक सीमित है लेकिन फ़ाइल नाम की लंबाई फ़ाइल सिस्टम निर्भर है (लेकिन आमतौर पर 255 बाइट्स)। हालाँकि, 32767 बाइट्स के लिए पथ की सीमा को बढ़ाने के लिए "यूनिकोड संस्करणों [विंडोज एपीआई फ़ंक्शंस]" का उपयोग करना संभव है, लेकिन यह सीमा \\?\ कुछ अनिर्दिष्ट लंबाई के लिए आवश्यक समय पर आंतरिक रूप से आवश्यक उपसर्ग का विस्तार करके कम हो जाती है । इस विस्तार के बाद पथ को 32767 बाइट के नीचे रहना चाहिए।
मिकको रैंटलैनेन

13

NTFS में लंबाई 255 है। NameLengthNTFS $Filenameविशेषता में फ़ील्ड एक ऑफसेट है जिसमें कोई ऑफसेट नहीं है; इससे 0-255 की रेंज मिलती है।

फ़ाइल का नाम iself अलग "नामस्थान" में हो सकता है। अब तक वहाँ हैं: POSIX, WIN32, DOS और (WIN32DOS - जब एक फ़ाइल नाम मूल रूप से DOS नाम हो सकता है)। (चूंकि स्ट्रिंग की लंबाई है, इसमें \ 0 शामिल हो सकते हैं , लेकिन इससे समस्याएं पैदा होंगी और ऊपर नामस्थान में नहीं है।)

इस प्रकार एक फ़ाइल या निर्देशिका का नाम 255 वर्णों तक हो सकता है। विंडोज के तहत पूर्ण पथ को निर्दिष्ट करते समय, आपको इस पथ को विस्तारित-लंबाई एक (~ 32k वर्ण) के रूप में चिह्नित करने के लिए \\? \ (या \\ \ _ \ _ UNC पथों के लिए यूएनसी \ _ सर्वर) के साथ पथ को उपसर्ग करने की आवश्यकता है। । यदि आपका रास्ता लंबा है, तो आपको अपनी कार्यशील निर्देशिका को रास्ते में सेट करना होगा (प्रक्रिया-व्यापक सेटिंग के कारण साइड-इफेक्ट्स)।




4

मैं इसे उपरोक्त अनुमोदित उत्तर में जोड़ रहा हूं।

स्पष्ट होने के लिए, लोगों का मानना ​​है कि यह 255-260 वर्णों का है, क्योंकि यह सब विंडोज एक्सप्लोरर का समर्थन करता है। यह फ़ाइल नाम पर फ़ाइल कॉपी की तरह कुछ करने में त्रुटि करेगा। हालाँकि, एक प्रोग्राम बहुत लंबे फ़ाइल नाम पढ़ सकता है और लिख सकता है (यह है कि आप उस लंबाई को कैसे प्राप्त करते हैं जो एक्सप्लोरर पहले स्थान पर शिकायत करता है)। इस तरह की स्थितियों में Microsoft के "अनुशंसित फ़िक्स" को मूल प्रोग्राम में फ़ाइल को खोलना है जो इसे लिखा था और इसका नाम बदलें।


मैंने एक फ़ाइल को एक फ़ोल्डर पदानुक्रम से बचाने की कोशिश की जो निश्चित रूप से vim के साथ कमांड लाइन से 260+ वर्णों से अधिक है, लेकिन असफल था।
पन्ना

@ वान: तो विम के लेखकों ने लंबे पथ नामों को लागू करने के लिए ध्यान नहीं दिया है। Win32 सबसिस्टम को दोष देने के लिए यह विंडोज नहीं है और न ही इसके पास NTFS ओपी के लिए फ़ाइल नाम लंबाई सीमा के साथ कुछ करना है ।
0xC0000022L

3

नए विंडोज एसडीके प्रलेखन (8.0) के अनुसार ऐसा लगता है कि एक नई पथ सीमा प्रदान की गई है। पथ हैंडलिंग फ़ंक्शंस का एक नया सेट और PATHCCH_MAX_CCH की परिभाषा इस प्रकार है:

// max # of characters we support using the "\\?\" syntax
// (0x7FFF + 1 for NULL terminator)
#define PATHCCH_MAX_CCH             0x8000

3
हालाँकि, विंडोज 8 एक्सप्लोरर (मेरे मामले में Win8.1 पूर्वावलोकन) इस सीमा के साथ काम नहीं कर रहा है और यह 259 वर्णों से अधिक लंबे रास्तों को स्वीकार नहीं करेगा।
Cplusminus_is_coming

3

आधिकारिक दस्तावेज का यह हिस्सा स्पष्ट रूप से कहता है कि यह NTFS, exFAT और FAT32 के लिए 255 यूनिकोड वर्ण और UDF के लिए 127 यूनिकोड या 254 ASCII वर्ण हैं।

इसके अलावा, अधिकतम पथ नाम की लंबाई हमेशा 32,760 यूनिकोड वर्ण होती है, जिसमें प्रत्येक पथ घटक 255 वर्णों से अधिक नहीं होता है।


पर्याप्त नजदीक। जैसा कि मैंने स्वीकार किए गए उत्तर पर एक टिप्पणी में बताया है, यह 32767 WCHARतत्व हैं। नहीं, यह है नहीं "यूनिकोड वर्ण" (!: कोड अंक, वर्ण आदि ... अपने यूनिकोड शब्दावली की जाँच करें)।
0xC0000022L 10

2

255 वर्ण, हालांकि पूरा मार्ग इससे अधिक लंबा नहीं होना चाहिए। इस बारे में विकिपीडिया पर एक अच्छी तालिका है: http://en.wikipedia.org/wiki/Filename


-2

238! मैंने निम्न बैट स्क्रिप्ट के साथ Win7 32 बिट के तहत इसकी जाँच की:

set "fname="
for /l %%i in (1, 1, 27) do @call :setname
@echo %fname%
for /l %%i in (1, 1, 100) do @call :check
goto :EOF
:setname
set "fname=%fname%_123456789"
goto :EOF
:check
set "fname=%fname:~0,-1%"
@echo xx>%fname%
if not exist %fname% goto :eof
dir /b
pause
goto :EOF

मैंने इसे विंडोज 7 के तहत एक प्रोग्राम के साथ चेक किया जो लंबे रास्तों को सही ढंग से हैंडल करता है। प्रत्येक व्यक्तिगत पथ खंड में 255 वर्ण (मैं उपयोग किया गया w) हो सकता है। तो अब क्या?
0xC0000022L

-2

वास्तव में यह 256 है, फाइल सिस्टम फंक्शनलिटी कम्पेरिजन, लिमिट्स देखें

Http://fixunix.com/microsoft-windows/30758-windows-xp-file-name-length-limit.html पर एक पोस्ट दोहराने के लिए

"मान लें कि हम NTFS के बारे में बात कर रहे हैं और FAT32 नहीं," पथ + फ़ाइल के लिए 255 वर्ण "एक्सप्लोरर की एक सीमा है, न कि फाइलसिस्टम ही। NTFS 32,000 यूनिकोड वर्णों तक पथ का समर्थन करता है, जिसमें प्रत्येक वर्ण 255 वर्णों तक होता है।

एक्सप्लोरर -और विंडोज एपीआई- आपको पथ के लिए 260 वर्णों तक सीमित करता है, जिसमें ड्राइव अक्षर, बृहदान्त्र, स्लैश को अलग करना और शून्य चरित्र को समाप्त करना शामिल है। यदि आप इसे \\"से शुरू करते हैं तो विंडोज में लंबा रास्ता पढ़ना संभव है।

यदि आप उपरोक्त पोस्ट पढ़ते हैं, तो आप देखेंगे कि एक 5 वीं चीज है जो आपके बारे में निश्चित हो सकती है: कम से कम एक बाधा कंप्यूटर उपयोगकर्ता ढूँढना!


4
नहीं - यह 255 है। NTFS $ में NameLength क्षेत्र फ़ाइल नाम विशेषता कोई ऑफसेट के साथ एक बाइट है; यह 0-255
डोमिनिक वेबर

-2

मैं 224 वर्णों से अधिक लंबे समय तक WS 2012 एक्सप्लोरर में नाम + अवधि + विलोपन के साथ एक फ़ाइल नहीं बना सकता । दूत को गोली मत मारो!

उसी सर्वर के CMD में मैं 235 वर्ण नाम से अधिक लंबा नहीं बना सकता :

सिस्टम निर्दिष्ट पथ नहीं ढूंढ सकता है।

एक्सप्लोरर में बनाए गए 224 वर्ण नाम वाली फाइल को नोटपैड ++ में नहीं खोला जा सकता है - यह सिर्फ एक नई फाइल के साथ आता है।


The system cannot find the path specified.के रूप में ही नहीं है The specified path, file name, or both are too long.। मुझे लगता है कि आपके पास एक टाइपो या कुछ और था। यदि आप एक पथ में एक फ़ाइल बनाने की कोशिश करते हैं जो मौजूद नहीं है या यदि आप उस दिशा में जाना चाहते हैं जो मौजूद नहीं है, तो आपको वह संदेश मिलता है।
माथियास बर्गर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.