MS-DOS फ़ाइल नाम के लिए कौन से वर्ण अमान्य हैं?


16

मैं x86-16 विधानसभा भाषा में फ़ाइल नाम I / O प्रक्रिया लिख ​​रहा हूं। कीबोर्ड से आठ अक्षर (मुझे लंबे फ़ाइल नाम का समर्थन करने की आवश्यकता नहीं है) और उन्हें ऑन-स्क्रीन टेक्स्ट इनपुट फ़ील्ड पर प्रिंट करता है।

फिलहाल मैं नंबर, अपर / लोअर-केस लेटर्स, अंडरस्कोर और हाइफ़न की अनुमति दे रहा हूं।

मैं सभी कानूनी प्रतीकों की अनुमति देना चाहूंगा, लेकिन मुझे प्रतिबंधित पात्रों की आधिकारिक सूची नहीं मिल सकती है। सामान्य ज्ञान मुझे बताता है कि स्लैश अवैध हैं, लेकिन अगर मुझे अनुमान लगाना था, तो मैं कहूंगा कि प्लस चरित्र कानूनी है। (संपादित करें: यह नहीं है!)

मैं पहले से ही अवधि के चरित्र को अनदेखा कर रहा हूं क्योंकि मेरा कोड स्वचालित रूप से अवधि और फ़ाइल एक्सटेंशन को जोड़ना चाहता है।


17
आपको रेट्रोक्रिटिंग भी उपयोगी लग सकता है।
बॉब

विंडोज में एक फोल्डर बनाने की कोशिश करें और 'डाल दें?' नाम में। एक टूलटिप आपको बताता है कि कौन से वर्ण निषिद्ध हैं। यह आपको एक शुरुआत देता है
:)

@Mixxiphoid जो काम नहीं करेगा क्योंकि विंडोज में अनुमत पात्रों का सेट बहुत बड़ा है। उदाहरण के लिए +,;[], a-zविंडोज में स्पेस की अनुमति है लेकिन डॉस की नहीं। एक्सप्लोरर मुझे त्रुटि देता है "एक फ़ाइल नाम में निम्न में से कोई भी वर्ण नहीं हो सकता है \ / : * ? " < > |जो DOS में प्रतिबंधित वर्णों का एक उपसमूह है
phuclv

1
@ एफ्युलव इसीलिए मैंने कहा कि 'यह आपको एक शुरुआत देता है' और यह भी कि यह एक टिप्पणी है और उत्तर नहीं है।
मिक्सक्सीफॉइड

सभी MS-DOS प्रतीक क्यों? अन्य पुराने ओएस नियमों पर भी विचार क्यों नहीं किया जाता है?
jpmc26

जवाबों:


30

एक संक्षिप्त सारांश विकिपीडिया पर पाया जा सकता है :

DOS फ़ाइल नाम के लिए कानूनी वर्णों में निम्नलिखित शामिल हैं:

  • ऊपरी मामला पत्र A-Z
  • नंबर 0-9
  • अंतरिक्ष (हालांकि आधार नाम या विस्तार में रिक्त स्थान को पीछे छोड़ना माना जाता है और फ़ाइल नाम का एक हिस्सा नहीं है, साथ ही उन स्थानों के साथ फ़ाइलनाम भी उद्धरण चिह्नों में संलग्न होना चाहिए जिन्हें डॉस कमांड लाइन पर उपयोग किया जाना है, और यदि डॉस जब प्रोग्राम प्रोग्रामिक रूप से बनाया जाता है, तो फ़ाइल नाम को क्‍वाड्रुपल कोट्स में संलग्न किया जाना चाहिए, जब डॉस कमांड बनाने वाले प्रोग्राम के भीतर एक चर के रूप में देखा जाता है।)
  • ! # $ % & ' ( ) - @ ^ _ ` { } ~
  • मान 128–255 (हालांकि यदि एनएलएस सेवाएं डॉस में सक्रिय हैं, तो निचले वर्ण के रूप में व्याख्या किए गए कुछ वर्ण अमान्य और अनुपलब्ध हैं)

इसमें निम्नलिखित ASCII वर्ण शामिल हैं:

  • " * + , / : ; < = > ? \ [ ] | [9]
  • Windows / MS-DOS में कोई शेल एस्केप वर्ण नहीं है
  • .(U + 002E। पूर्ण विराम) नाम और विस्तार क्षेत्रों के भीतर, को छोड़कर। और .. प्रविष्टियाँ (नीचे देखें)
  • निचले मामले पत्र a- z(FAT12 / FAT16 पर A-Z के रूप में संग्रहीत)
  • नियंत्रण वर्ण ०-३१
  • मूल्य 127 (DEL) [संदिग्ध - चर्चा]

https://en.wikipedia.org/wiki/8.3_filename#Directory_table

और यहाँ क्या MS-DOS 6 उपयोगकर्ता गाइड आधिकारिक तौर पर कहा गया है

नामकरण फ़ाइलें और निर्देशिकाएँ

प्रत्येक फ़ाइल और निर्देशिका, प्रत्येक ड्राइव पर रूट निर्देशिका को छोड़कर, एक नाम होना चाहिए। निम्न सूची फाइलों और निर्देशिकाओं के नामकरण के नियमों को सारांशित करती है। फ़ाइल और निर्देशिका नाम:

  • अधिकतम आठ वर्ण हो सकते हैं। इसके अलावा, आप तीन वर्णों तक का एक्सटेंशन शामिल कर सकते हैं।
  • केस-संवेदी नहीं हैं। इससे कोई फर्क नहीं पड़ता कि आप टाइप करते समय अपरकेस या लोअरकेस अक्षरों का उपयोग करते हैं या नहीं।
  • Z के माध्यम से केवल अक्षर A, 9 के माध्यम से संख्या 0 और निम्न विशेष वर्ण हो सकते हैं: अंडरस्कोर ( _), कैरेट ( ^), डॉलर चिन्ह ( $), tilde ( ~), विस्मयादिबोधक बिंदु ( !), संख्या चिह्न ( #), प्रतिशत चिह्न ( %), एम्परसेंड ( &), हाइफ़न ( -), ब्रेसिज़ ( {}), साइन इन करें ( @), एकल उद्धरण चिह्न ( `), एपोस्ट्रोफ़ ( '), और कोष्ठक ()। कोई अन्य विशेष वर्ण स्वीकार्य नहीं हैं।
  • इसमें रिक्त स्थान, अल्पविराम, बैकस्लैश या अवधि नहीं हो सकती (अवधि को छोड़कर जो विस्तार से नाम को अलग करती है)।
  • उसी निर्देशिका में किसी अन्य फ़ाइल या उपनिर्देशिका के नाम के समान नहीं हो सकता।

यह पीसी-डॉस 7 से है:

फ़ाइल में आपके द्वारा निर्दिष्ट नाम निम्नलिखित मानदंडों को पूरा करता है:

  • इसमें आठ से अधिक वर्ण नहीं हो सकते।
  • इसमें Z के माध्यम से अक्षर A, 9 के माध्यम से संख्या 0 और निम्नलिखित विशेष वर्ण शामिल हो सकते हैं:

    _ underscore            ^  caret
    $ dollar sign           ~  tilde
    ! exclamation point     #  number sign
    % percent sign          &  ampersand
    - hyphen                {} braces
    @ at sign               `  single quote
    ' apostrophe            () parentheses
    

नोट: कोई अन्य विशेष वर्ण स्वीकार्य नहीं हैं।

  • नाम में रिक्त स्थान, अल्पविराम, बैकस्लैश या अवधि नहीं हो सकती (अवधि को छोड़कर जो विस्तार से नाम को अलग करता है)।
  • नाम निम्न आरक्षित फ़ाइल नामों में से एक नहीं हो सकता है: CLOCK $, CON, AUX, COM1, COM2, COM3, COM4, ​​LPT1, LPT2, LPT3, LPT4, NUL और PRN।
  • यह निर्देशिका के भीतर किसी अन्य फ़ाइल के समान नाम नहीं हो सकता है।

उपयोगकर्ता की गाइड - पीसी डॉस 7

किसी नाम का पहला बाइट 0x20 (स्थान) नहीं होना चाहिए। लघु नाम या एक्सटेंशन रिक्त स्थान के साथ गद्देदार हैं। विशेष ASCII वर्ण 0x22 ( "), 0x2a ( *), +0x2b ( ,), 0x2c ( .), 0x2e ( /), 0x2f ( :), 0x3a ( ;), 0x3b ( <), 0x3c ( =), 0x3d ( >), 0x3e ( ?) , 0x3f ( ) , 0x5b ( [), 0x5c ( \), 0x5d ( ]), 0x7c ( |) की अनुमति नहीं है।

FAT फाइलसिस्टम

यदि आप भी MS-DOS 5.0 में रुचि रखते हैं तो यहाँ है


11
यह ध्यान देने योग्य है कि भले ही वे वैध वर्ण हो विशेष फ़ाइल नाम के लायक हो सकता है CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, और LPT9(देखें भी अनुमति नहीं है यहाँ )
विधेयक Tür

3
@ThomasSchremser "उपयोग न करें", "से बचें" और "अनुशंसित नहीं" "अनुमति नहीं" के समान नहीं है।
रोबेथ

1
@RobIII हाँ, लेकिन वे "MS-DOS" प्रलेखन के लिए "विंडोज़> डेस्कटॉप" प्रलेखन से जुड़े थे। डॉस के लिए विकी कहते हैं, "डॉस में आरक्षित डिवाइस ऐसे नाम हैं जो विस्तार की परवाह किए बिना फ़ाइल नाम के रूप में इस्तेमाल नहीं किया जा सकता क्योंकि वे निर्मित चरित्र उपकरणों के कब्जे में कर रहे हैं"। दूसरे शब्दों में, डॉस और विंडोज के कुछ संस्करणों में अनुमति नहीं है, और अन्य विंडोज संस्करणों में अनुशंसित नहीं है।
क्विक

यह दिलचस्प है कि `को एकल उद्धरण के रूप में संदर्भित किया जाता है। मैंने हमेशा सुना है कि इसे एक बैकटिक कहा जाता है, और '(वे जिसे गलत कहते हैं) (गलत तरीके से नहीं) एक उद्धरण के रूप में।
ale10ander

2
@ ale10ander हाँ, जिसने मुझे चौंका दिया। मुझे हमेशा से नफरत है कि कई लोग इसे एपोस्ट्रोफ के लिए उपयोग करते हैं (जैसे I`m में) या उद्धरण का शुरुआती हिस्सा। उदाहरण के लिए GNU डॉक्यूमेंटेशन हमेशा `
लाइक दिस

12

एमएस / पीसी / डीआर-डॉस एप्लिकेशन प्रोग्रामर के रूप में सख्ती से बोलना, आपको इस जानकारी के लिए ऑपरेटिंग सिस्टम से पूछना चाहिए। INT 0x21 AX = 0x6505 के साथ FCHARआपके देश और कोड पृष्ठ के लिए तथाकथित NLS तालिका के लिए एक संकेतक लौटाता है । यह तालिका वर्णों की एक श्रृंखला और वर्णनाम को समाप्त करने वाले वर्णों के एक और समूह को सूचीबद्ध करती है।

सिद्धांत रूप में यह देश और कोड पृष्ठ द्वारा भिन्न होता है। लेकिन तथ्य यह है कि इसे औपचारिक रूप से ओएस / 2 नियंत्रण कार्यक्रम एपीआई में नहीं लिया गया था और तथ्य यह है कि सभी कोडपेजों में फ्रीडोस की 1 तालिका है और देश बताते हैं कि यह व्यवहार में काफी हद तक अपरिवर्तनीय है।

आगे की पढाई


10

मैंने इसे MS-DOS 3.3 के मैनुअल में पाया। मैं 6.22 चला रहा हूं, लेकिन यह अभी भी लागू होता है। मुझे '+' की अनुमति नहीं थी।

यहां छवि विवरण दर्ज करें



@Stewart क्या महत्वपूर्ण है विकिपीडिया पर उद्धरण हैं, न कि केवल विकिपीडिया। यदि संदेह में, लेख में केवल फुटनोट्स और संदर्भों की जांच करें \ _Mylifeisabug मैंने अभी-अभी MS-DOS 6 मैनुअल
phuclv

3

यदि आप केवल फ़ाइल नाम को मान्य करना चाहते हैं, तो आप यह INT 21H/AH=60H (TRUENAME - CANONICALIZE FILENAME OR PATH)सुनिश्चित करने के बाद उपयोग कर सकते हैं कि पास किए गए फ़ाइलनाम में कोई बृहदान्त्र या बैकस्लैश नहीं है (उन्हें ड्राइव अक्षर और निर्देशिका के रूप में माना जा सकता है): फ़ंक्शन आपके प्रस्तावित फ़ाइलनाम को ले जाता है और canonicalize करने का प्रयास करता है यह अक्षरों को अपरकेस करके और अमान्य वर्णों के लिए जाँच करके (यह ड्राइव अक्षर / सर्वर नाम और पथ को भी जोड़ता है।)

छद्मकोड में:

If !(filename contains {"/", "\", ".", ":"})
    Canonicalize filename (INT 21H/AH=60H)
    If !(CF is set) filename is valid
Filename is not valid
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.