मैं एक डेटाबेस तालिका तैयार कर रहा हूं, जो अपलोड की गई फ़ाइलों के फ़ाइलनाम को पकड़ लेगी। Windows XP या Vista द्वारा उपयोग किए गए NTFS में फ़ाइल नाम की अधिकतम लंबाई क्या है?
मैं एक डेटाबेस तालिका तैयार कर रहा हूं, जो अपलोड की गई फ़ाइलों के फ़ाइलनाम को पकड़ लेगी। Windows XP या Vista द्वारा उपयोग किए गए NTFS में फ़ाइल नाम की अधिकतम लंबाई क्या है?
जवाबों:
फ़ाइल नाम के व्यक्तिगत घटक (यानी पथ के साथ प्रत्येक उपनिर्देशिका, और अंतिम फ़ाइल नाम) 255 वर्णों तक सीमित हैं, और कुल पथ लंबाई लगभग 32,000 वर्णों तक सीमित है।
हालाँकि, Windows पर, आप MAX_PATH
मान (फ़ाइलों के लिए 259 वर्ण, फ़ोल्डर्स के लिए 248) से अधिक नहीं हो सकते । देखपूर्ण विवरण के लिए http://msdn.microsoft.com/en-us/library/aa365247.aspx
यह 257 अक्षर है। सटीक होने के लिए: एनटीएफएस स्वयं कई हजार अक्षरों की अधिकतम फ़ाइल नाम-लंबाई (लगभग 30'000 कुछ) लगाता है। हालाँकि, Windows पथ + फ़ाइल नाम के लिए 260 अधिकतम लंबाई लगाता है। ड्राइव + फ़ोल्डर में कम से कम 3 वर्ण होते हैं, इसलिए आप 257 से समाप्त होते हैं।
जब फ़ाइल को लंबे फ़ाइल नाम से सहेजने का प्रयास किया जाता है, तो फ्रेमवर्क 4.5 पर यह "अनहैंड्ड अपवाद" कहा जाता है:
निर्दिष्ट पथ, फ़ाइल नाम या दोनों बहुत लंबे हैं। पूरी तरह से योग्य फ़ाइल नाम 260 से कम वर्णों का होना चाहिए , और निर्देशिका नाम 248 वर्णों से कम होना चाहिए ।
Windows XP NTFS पर 199, मैंने अभी जाँच की है।
यह सिद्धांत नहीं है, बल्कि मेरे लैपटॉप पर कोशिश करने से है। वहाँ शमन प्रभाव हो सकता है, लेकिन यह शारीरिक रूप से मुझे इसे बड़ा नहीं बनाने देगा।
वहाँ कुछ अन्य सेटिंग यह सीमित है, मुझे आश्चर्य है? इसे अपने लिए आजमाएं।
w
, उसको डिलीट किया और विंडोज 7 x64 पर उसी नाम से एक फोल्डर बनाया। अब सवाल यह है कि यहाँ सीमित कारक क्या है: NTFS संस्करण, OS या सबसिस्टम या XP में Win32 API?
MSDN के अनुसार , यह 260 वर्ण है। इसमें शामिल है "<NUL>"
-अदृश्य टर्मिनेटिंग अशक्त चरित्र, इसलिए वास्तविक लंबाई 259 है।
लेकिन लेख पढ़ें, यह थोड़ा अधिक जटिल है।
\\?\
कुछ अनिर्दिष्ट लंबाई के लिए आवश्यक समय पर आंतरिक रूप से आवश्यक उपसर्ग का विस्तार करके कम हो जाती है । इस विस्तार के बाद पथ को 32767 बाइट के नीचे रहना चाहिए।
NTFS में लंबाई 255 है। NameLength
NTFS $Filename
विशेषता में फ़ील्ड एक ऑफसेट है जिसमें कोई ऑफसेट नहीं है; इससे 0-255 की रेंज मिलती है।
फ़ाइल का नाम iself अलग "नामस्थान" में हो सकता है। अब तक वहाँ हैं: POSIX, WIN32, DOS और (WIN32DOS - जब एक फ़ाइल नाम मूल रूप से DOS नाम हो सकता है)। (चूंकि स्ट्रिंग की लंबाई है, इसमें \ 0 शामिल हो सकते हैं , लेकिन इससे समस्याएं पैदा होंगी और ऊपर नामस्थान में नहीं है।)
इस प्रकार एक फ़ाइल या निर्देशिका का नाम 255 वर्णों तक हो सकता है। विंडोज के तहत पूर्ण पथ को निर्दिष्ट करते समय, आपको इस पथ को विस्तारित-लंबाई एक (~ 32k वर्ण) के रूप में चिह्नित करने के लिए \\? \ (या \\ \ _ \ _ UNC पथों के लिए यूएनसी \ _ सर्वर) के साथ पथ को उपसर्ग करने की आवश्यकता है। । यदि आपका रास्ता लंबा है, तो आपको अपनी कार्यशील निर्देशिका को रास्ते में सेट करना होगा (प्रक्रिया-व्यापक सेटिंग के कारण साइड-इफेक्ट्स)।
मैं इसे उपरोक्त अनुमोदित उत्तर में जोड़ रहा हूं।
स्पष्ट होने के लिए, लोगों का मानना है कि यह 255-260 वर्णों का है, क्योंकि यह सब विंडोज एक्सप्लोरर का समर्थन करता है। यह फ़ाइल नाम पर फ़ाइल कॉपी की तरह कुछ करने में त्रुटि करेगा। हालाँकि, एक प्रोग्राम बहुत लंबे फ़ाइल नाम पढ़ सकता है और लिख सकता है (यह है कि आप उस लंबाई को कैसे प्राप्त करते हैं जो एक्सप्लोरर पहले स्थान पर शिकायत करता है)। इस तरह की स्थितियों में Microsoft के "अनुशंसित फ़िक्स" को मूल प्रोग्राम में फ़ाइल को खोलना है जो इसे लिखा था और इसका नाम बदलें।
नए विंडोज एसडीके प्रलेखन (8.0) के अनुसार ऐसा लगता है कि एक नई पथ सीमा प्रदान की गई है। पथ हैंडलिंग फ़ंक्शंस का एक नया सेट और PATHCCH_MAX_CCH की परिभाषा इस प्रकार है:
// max # of characters we support using the "\\?\" syntax
// (0x7FFF + 1 for NULL terminator)
#define PATHCCH_MAX_CCH 0x8000
आधिकारिक दस्तावेज का यह हिस्सा स्पष्ट रूप से कहता है कि यह NTFS, exFAT और FAT32 के लिए 255 यूनिकोड वर्ण और UDF के लिए 127 यूनिकोड या 254 ASCII वर्ण हैं।
इसके अलावा, अधिकतम पथ नाम की लंबाई हमेशा 32,760 यूनिकोड वर्ण होती है, जिसमें प्रत्येक पथ घटक 255 वर्णों से अधिक नहीं होता है।
WCHAR
तत्व हैं। नहीं, यह है नहीं "यूनिकोड वर्ण" (!: कोड अंक, वर्ण आदि ... अपने यूनिकोड शब्दावली की जाँच करें)।
255 वर्ण, हालांकि पूरा मार्ग इससे अधिक लंबा नहीं होना चाहिए। इस बारे में विकिपीडिया पर एक अच्छी तालिका है: http://en.wikipedia.org/wiki/Filename ।
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
w
) हो सकता है। तो अब क्या?
वास्तव में यह 256 है, फाइल सिस्टम फंक्शनलिटी कम्पेरिजन, लिमिट्स देखें ।
Http://fixunix.com/microsoft-windows/30758-windows-xp-file-name-length-limit.html पर एक पोस्ट दोहराने के लिए
"मान लें कि हम NTFS के बारे में बात कर रहे हैं और FAT32 नहीं," पथ + फ़ाइल के लिए 255 वर्ण "एक्सप्लोरर की एक सीमा है, न कि फाइलसिस्टम ही। NTFS 32,000 यूनिकोड वर्णों तक पथ का समर्थन करता है, जिसमें प्रत्येक वर्ण 255 वर्णों तक होता है।
एक्सप्लोरर -और विंडोज एपीआई- आपको पथ के लिए 260 वर्णों तक सीमित करता है, जिसमें ड्राइव अक्षर, बृहदान्त्र, स्लैश को अलग करना और शून्य चरित्र को समाप्त करना शामिल है। यदि आप इसे
\\
"से शुरू करते हैं तो विंडोज में लंबा रास्ता पढ़ना संभव है।
यदि आप उपरोक्त पोस्ट पढ़ते हैं, तो आप देखेंगे कि एक 5 वीं चीज है जो आपके बारे में निश्चित हो सकती है: कम से कम एक बाधा कंप्यूटर उपयोगकर्ता ढूँढना!
मैं 224 वर्णों से अधिक लंबे समय तक WS 2012 एक्सप्लोरर में नाम + अवधि + विलोपन के साथ एक फ़ाइल नहीं बना सकता । दूत को गोली मत मारो!
उसी सर्वर के CMD में मैं 235 वर्ण नाम से अधिक लंबा नहीं बना सकता :
सिस्टम निर्दिष्ट पथ नहीं ढूंढ सकता है।
एक्सप्लोरर में बनाए गए 224 वर्ण नाम वाली फाइल को नोटपैड ++ में नहीं खोला जा सकता है - यह सिर्फ एक नई फाइल के साथ आता है।
The system cannot find the path specified.
के रूप में ही नहीं है The specified path, file name, or both are too long.
। मुझे लगता है कि आपके पास एक टाइपो या कुछ और था। यदि आप एक पथ में एक फ़ाइल बनाने की कोशिश करते हैं जो मौजूद नहीं है या यदि आप उस दिशा में जाना चाहते हैं जो मौजूद नहीं है, तो आपको वह संदेश मिलता है।