मैं के बीच अंतर के बारे में सोच रहा था \
और /
फ़ाइल पथ में। मैंने देखा है कि कभी-कभी एक रास्ता होता है /
और कभी-कभी यह साथ होता है \
।
यह बहुत अच्छा होगा अगर कोई भी समझा सकता है कि कब उपयोग करना है \
और /
।
मैं के बीच अंतर के बारे में सोच रहा था \
और /
फ़ाइल पथ में। मैंने देखा है कि कभी-कभी एक रास्ता होता है /
और कभी-कभी यह साथ होता है \
।
यह बहुत अच्छा होगा अगर कोई भी समझा सकता है कि कब उपयोग करना है \
और /
।
जवाबों:
/
यूनिक्स और यूनिक्स जैसी प्रणालियों पर पथ विभाजक है। आधुनिक विंडोज आम तौर पर दोनों का उपयोग कर सकते \
हैं और /
एक दूसरे के स्थान filepaths के लिए है, लेकिन माइक्रोसॉफ्ट के उपयोग के लिए वकालत की है \
दशकों के लिए पथ विभाजक के रूप में।
यह उन ऐतिहासिक कारणों के लिए किया जाता है जो 1970 के दशक की तारीख तक आते हैं, एक दशक से अधिक विंडोज की भविष्यवाणी करते हुए। शुरुआत में, MS-DOS (प्रारंभिक विंडोज की नींव) ने निर्देशिकाओं का समर्थन नहीं किया। /
शुरुआत से ही चरित्र का उपयोग करते हुए यूनिक्स को डायरेक्टरी सपोर्ट था । हालाँकि, जब निर्देशिकाओं को MS-DOS 2.0 में जोड़ा गया था, तो Microsoft और IBM पहले से ही कमांड स्विच के/
लिए वर्ण का उपयोग कर रहे थे , और DOS के हल्के पार्सर ( QDOS से उतारे जाने के कारण , जिसे लोअर एंड हार्डवेयर पर चलाने के लिए डिज़ाइन किया गया था), वे एक नहीं ढूँढ सके! अपने मौजूदा अनुप्रयोगों के साथ संगतता को तोड़ने के बिना चरित्र का उपयोग करने के लिए संभव तरीका ।/
इसलिए, जब फ़ाइलपथों को इन जैसे आदेशों के लिए तर्क के रूप में पारित किया जाता है, तो "एक स्विच लापता" या "अमान्य स्विच" के बारे में त्रुटियों से बचने के लिए:
cd/ <---- no switch specified
dir folder1/folder2 <---- /folder2 is not a switch for dir
यह तय किया गया था कि \
चरित्र का उपयोग किया जाएगा, इसलिए आप उन आदेशों को इस तरह लिख सकते हैं
cd\
dir folder1\folder2
बिना किसी त्रुटि के।
बाद में, माइक्रोसॉफ्ट और आईबीएम ने ओएस / 2 नामक डीओएस से संबंधित एक ऑपरेटिंग सिस्टम पर सहयोग किया । ओएस / 2 में दोनों विभाजकों का उपयोग करने की क्षमता थी, शायद अधिक यूनिक्स डेवलपर्स को आकर्षित करने के लिए। जब 1990 में Microsoft और IBM ने तरीके बनाए, तो Microsoft ने कौन सा कोड लिया और Windows NT बनाया , जिस पर विंडोज के सभी आधुनिक संस्करण आधारित हैं, इस विभाजक अज्ञेयवाद को अपने साथ लेकर चलते हैं।
जैसा कि बैकवर्ड कम्पैटिबिलिटी माइक्रोसॉफ्ट के सभी प्रमुख OS बदलावों से खेल का नाम है, जो उन्होंने (Win16 / DOS को Win16 / Win32 को, Win32 / WinNT को) किया है, यह ख़ासियत अटक गई, और यह शायद थोड़ी देर के लिए मौजूद है।
यह इस कारण से है कि यह विसंगति मौजूद है। यह वास्तव में आप क्या कर रहे हैं पर कोई प्रभाव नहीं होना चाहिए क्योंकि, जैसा कि मैंने कहा, WinAPI आम तौर पर उन्हें परस्पर उपयोग कर सकते हैं। हालाँकि, /
जब आप \
निर्देशिका नामों के बीच उम्मीद करते हैं , तो 3 पार्टी एप्लिकेशन संभवतः टूट जाएंगे । यदि आप विंडोज का उपयोग कर रहे हैं, तो साथ रहें \
। यदि आप यूनिक्स या यूआरआई का उपयोग कर रहे हैं (जिनका यूनिक्स पथ में आधार है, लेकिन यह पूरी तरह से एक और कहानी है), तो उपयोग करें /
।
सी # के संदर्भ में: यह ध्यान दिया जाना चाहिए, क्योंकि यह है तकनीकी रूप से एक सी # सवाल है, कि आप और अधिक "पोर्टेबल" सी # कोड लिखने के लिए चाहते हैं, तो लगता है कि दोनों यूनिक्स और विंडोज (भले ही सी # मुख्य रूप से एक Windows भाषा है) पर काम करता है, तो आप Path.DirectorySeparatorChar
फ़ील्ड का उपयोग करना चाह सकते हैं, इसलिए आपका कोड उस सिस्टम पर पसंदीदा विभाजक का उपयोग करता है, और Path.Combine()
पथ को ठीक से जोड़ने के लिए उपयोग करता है।
Path.Combine
।
foo.exe /bar
कमांड-लाइन स्विच के foo.exe \bar
रूप में व्याख्या की जा सकती है , जबकि उदाहरण के लिए वर्तमान "ड्राइव" bar
की रूट डायरेक्टरी में स्थित फ़ाइल / फ़ोल्डर के संदर्भ में व्याख्या की जा सकती है । \
C:\
/
करने के लिए \
परत compat Win32 में किया जाता है, जिसका अर्थ है कि यदि आप इसे दरकिनार, वहाँ एक अंतर हो जाएगा। इसका सबसे प्रसिद्ध उदाहरण विस्तारित लंबाई पथ हैं: \\?\C:\
NTFS पर अपेक्षित रूप से काम करेंगे, लेकिन \\?\C:/
नहीं करेंगे।
/
और ` is not entirely true. For network path you have to use
'(जैसे। \\ <servername> bot not // <servername>)
MS-DOS 1.0 ने CP / M से '/' के कमांड लाइन विकल्प (या स्विच) वर्ण सम्मेलन को बनाए रखा। उस समय फ़ाइल सिस्टम में कोई निर्देशिका संरचना नहीं थी और कोई संघर्ष नहीं था।
जब Microsoft ने MS-DOS (और PC-DOS) 2.0 के साथ पर्यावरण जैसे अधिक यूनिक्स को विकसित किया, तो उन्हें मौजूदा विभाजक रेखा विकल्पों के साथ संघर्ष नहीं करने वाली चीज़ का उपयोग करके पथ विभाजक का प्रतिनिधित्व करने की आवश्यकता थी। आंतरिक रूप से, सिस्टम '' / 'या' \ 'के साथ समान रूप से अच्छी तरह से काम करता है। कमांड प्रोसेसर (और कई एप्लिकेशन) स्विच चरित्र के रूप में '/' का उपयोग करना जारी रखता है।
एक CONFIG.SYS
प्रविष्टि SWITCHAR=-
का उपयोग /
यूनिक्स संगतता में सुधार करने के लिए डिफ़ॉल्ट को ओवरराइड करने के लिए किया जा सकता है । यह कमांड में निर्मित होता है और मानक उपयोगिताओं वैकल्पिक चरित्र का उपयोग करते हैं। यूनिक्स पथ विभाजक को तब फ़ाइल और निर्देशिका नामों के लिए स्पष्ट रूप से उपयोग किया जा सकता है। इस प्रविष्टि को बाद के संस्करणों में हटा दिया गया था, लेकिन बूटिंग के बाद मान सेट करने के लिए एक डॉस कॉल को प्रलेखित किया गया था।
यह बहुत कम इस्तेमाल किया गया था और अधिकांश तीसरे पक्ष के उपकरण अपरिवर्तित रहे। भ्रम बना रहता है। यूनिक्स उपकरणों के कई पोर्ट '-' स्विच चरित्र को बनाए रखते हैं जबकि कुछ दोनों सम्मेलनों का समर्थन करते हैं।
फॉलो-ऑन पावरशेल कमांड प्रोसेसर कठोर भागने और स्विच मापदंडों को लागू करता है और बड़े पैमाने पर भ्रम से बचा जाता है जहां विरासत उपकरण का उपयोग किया जाता है।
न तो प्रश्न और न ही उत्तर C # से संबंधित है।
/
रूप में, विभिन्न पीडीपी -11 ऑपरेटिंग सिस्टम जैसे आरएसटीएस (1970) और आरएसएक्स (1972) में एक विकल्प परिचयकर्ता के रूप में उपयोग सीपी / एम (1973) में है।
यूनिक्स-आधारित सिस्टम \
एक एस्केप कैरेक्टर है, जो कि \
पार्सर को बताता है कि यह एक स्पेस है न कि स्टेटमेंट का अंत। यूनिक्स सिस्टम पर /
निर्देशिका विभाजक है।
Windows \
निर्देशिका विभाजक है, लेकिन /
फ़ाइल या निर्देशिका नामों में उपयोग नहीं किया जा सकता है।
\
और /
(साथ ही कई अन्य प्रतीकों) का उपयोग फ़ाइल नाम में नहीं किया जा सकता है क्योंकि डॉस के पास एक ही जटिल पार्सर नहीं है जो यूनिक्स उपयोगकर्ताओं के लिए उपयोग किया जाता है। एक अच्छे पार्सर की कमी MS-DOS के QDOS ("क्विक एंड डर्टी ऑपरेटिंग सिस्टम") से उतरने का परिणाम थी। इसका मतलब चीजों को जल्दी और सीमित हार्डवेयर पर चलाना था। यह सब निश्चित रूप से वर्तमान समय में पिछड़ी अनुकूलता के लिए मौजूद है।
/
"अल्टरनेट_डायरेरी_सेपरेटर" के रूप में जोड़ा गया था
\
एक Windows फ़ाइल पथ /
में सही है और एक URI में सही है।यह प्रासंगिक संसाधन हो सकता है।
\
करता है /
। मेरी पुस्तक में इसे "मूल रूप से काम करता है" कहा जाता है।
दिए गए उत्तरों के अलावा, यह उल्लेखनीय है कि प्रोग्रामिंग भाषाओं, पाठ संपादकों और सामान्य प्रणालियों में \
विशेष वर्ण (जैसे \n
\t
) के लिए व्यापक रूप से उपयोग किया जाता है जो शाब्दिक विश्लेषण लागू करते हैं।
यदि आप उदाहरण के लिए प्रोग्रामिंग कर रहे हैं, तो \\
इसे ठीक से उपयोग करने के लिए किसी अन्य ( ) के साथ बैकस्लैश से बचने की आवश्यकता के लिए कई बार असुविधाजनक है - या भागने के तार का उपयोग करने की आवश्यकता है, जैसे कि सी # @"\test"
।
बेशक, जैसा कि पहले उल्लेख किया गया है, वेब यूआरआई मानक द्वारा आगे स्लैश का उपयोग करते हैं लेकिन दोनों स्लैश नवीनतम और सबसे सामान्य कमांड लाइन टूल में काम करते हैं।
UPDATE: थोड़ी खोज करने के बाद, यह पूरी कहानी के बीच का लगता है /
और \
उस समय के "कंप्यूटर इतिहास" में वापस चला जाता है, उस समय के डॉस और यूनिक्स-आधारित प्रणालियों में। HowToGeek में इस कहानी के बारे में एक दिलचस्प लेख है ।
संक्षेप में, डॉस 1.0 को शुरू में आईबीएम ने बिना डायरेक्टरी सपोर्ट के जारी किया /
था , और इसे दूसरे ("स्विचिंग") कमांड कार्यक्षमता के लिए उपयोग किया गया था। जब निर्देशिकाओं को 2.0 संस्करण में पेश किया /
गया था, तो पहले से ही उपयोग में था, इसलिए आईबीएम ने नेत्रहीन निकटतम प्रतीक चुना, जो था \
। दूसरी ओर, यूनिक्स मानक रूप /
से निर्देशिकाओं के लिए उपयोग किया जाता है।
जब उपयोगकर्ताओं ने कई अलग-अलग प्रणालियों का उपयोग करना शुरू कर दिया, तो वे भ्रमित होने लगे, ओएस डेवलपर्स को सिस्टम को दोनों मामलों में काम करने का प्रयास करने के लिए बना दिया - यह URL के हिस्से में भी लागू होता है, क्योंकि कुछ ब्राउज़र http: \\ www.test का समर्थन करते हैं । com \ go प्रारूप। यह सामान्य रूप से कमियां थीं, लेकिन पूरी बात आज भी पिछड़े हुए कम्पार्टेबिलिटी कारणों के लिए है, विंडोज पर दोनों स्लैश के समर्थन के प्रयास के साथ, भले ही वे अब डॉस पर आधारित नहीं हैं।
` as well as many
मेक 'शेल का उपयोग करते हैं तो यूनिक्स बहुत क्रोधित होता है ... आप सही हैं कि हाल ही में विंडोज ने ALTERNATE_PATH_SEPARATOR पर्यावरण चर को परिभाषित किया है जो /
इसलिए कि शायद विंडोज दोनों को स्वीकार कर सकता है।
/
सिस्टम में हर जगह सहायक रास्तों को शामिल किया गया है - ज़ाहिर है, अनुप्रयोग उन रास्तों को उनके अवकाश पर गलत समझ सकते हैं, इसलिए इसका बहुत अधिक उपयोग नहीं किया गया था। गैर-सीएलआई अनुप्रयोग जो अपने स्वयं के (टूटे हुए) रास्तों का सत्यापन करने की कोशिश नहीं करते थे, वे ठीक हो जाते हैं।
आपको C # का उपयोग नहीं करना चाहिए। आपको हमेशा Path
क्लास का इस्तेमाल करना चाहिए । इसमें एक विधि शामिल है Path.Combine
जिसका उपयोग विभाजक को निर्दिष्ट किए बिना पथ बनाने के लिए किया जा सकता है।
उदाहरण उपयोग:
string fullPath = System.IO.Path.Combine("C:", "Folder1", "Folder2", "file.txt");
\
विंडोज स्थानीय फ़ाइल पथ और नेटवर्क पथ के लिए उपयोग किया जाता है:
C:\Windows\Temp\
या \\NetworkSharedDisk\Documents\Archive\
/
मानक URI द्वारा निम्न के रूप में क्या आवश्यक है:
/
पथ में भी पहचानता है (कम से कम 7 करता है)।
/
जैसा कि मैंने उत्तर में कहा है कि स्टैंडरैड यूआरआई के उपयोग को स्पष्ट करने के लिए।