c# फ़ाइल पथ में आगे स्लैश(/) और बैकस्लैश(\) के बीच अंतर




path filepath (6)

/ यूनिक्स और यूनिक्स जैसी प्रणालियों पर पथ विभाजक है। आधुनिक विंडोज़ आम तौर पर दोनों फाइलों के लिए \ और / दूसरे के लिए उपयोग कर सकते हैं, लेकिन माइक्रोसॉफ्ट ने दशकों तक पथ विभाजक के रूप में उपयोग के लिए वकालत की है।

यह 1 9 70 के दशक तक ऐतिहासिक कारणों से किया जाता है, जो एक दशक से अधिक समय तक विंडोज की भविष्यवाणी करता है। शुरुआत में, एमएस-डॉस (प्रारंभिक विंडोज़ की नींव) निर्देशिकाओं का समर्थन नहीं करता था। यूनिक्स के प्रारंभ से ही / चरित्र का उपयोग कर निर्देशिका समर्थन था। हालांकि, जब एमएस-डॉस 2.0 में निर्देशिकाएं जोड़ दी गईं, तो माइक्रोसॉफ्ट और आईबीएम पहले ही कमांड स्विच के लिए / चरित्र का उपयोग कर रहे थे, और डॉस के लाइटवेट पार्सर (क्यूडीओएस से निकले, जो कि निचले अंत हार्डवेयर पर चलाने के लिए डिज़ाइन किए गए थे) के कारण, वे नहीं ढूंढ पाए अपने मौजूदा अनुप्रयोगों के साथ संगतता को तोड़ने के बिना / चरित्र का उपयोग करने का एक व्यवहार्य तरीका।

इसलिए, इनके जैसे कमांडों के तर्क के रूप में फ़ाइलपैथ को पास करते समय "स्विच लापता" या "अमान्य स्विच" के बारे में त्रुटियों से बचने के लिए:

cd/                        <---- no switch specified
dir folder1/folder2        <---- /folder2 is not a switch for dir

यह निर्णय लिया गया था कि इसके बजाय \ वर्ण का उपयोग किया जाएगा, ताकि आप इस तरह के कमांड लिख सकें

cd\
dir folder1\folder2

त्रुटि के बिना।

बाद में, माइक्रोसॉफ्ट और आईबीएम ने OS/2 नामक डॉस से संबंधित एक ऑपरेटिंग सिस्टम पर सहयोग किया। ओएस / 2 में दोनों यूनिक्स डेवलपर्स को आकर्षित करने के लिए शायद दोनों विभाजकों का उपयोग करने की क्षमता थी। जब माइक्रोसॉफ्ट और आईबीएम ने 1 99 0 में अलग-अलग तरीके से विभाजन किया , तो माइक्रोसॉफ्ट ने अपना कोड लिया और विंडोज एनटी बनाया, जिस पर विंडोज के सभी आधुनिक संस्करण इस पर विभाजक अज्ञेयवाद को लेकर हैं।

पिछली संगतता माइक्रोसॉफ्ट के लिए उन सभी प्रमुख ओएस संक्रमणों से शुरू हुई है जो उन्होंने किए हैं (विन 16 / डीओएस से विन 16 / विन 32, विन 32 / विन 32 तक, यह असाधारणता अटक गई है, और शायद यह संभवतः थोड़ी देर के लिए मौजूद है।

इस कारण से यह विसंगति मौजूद है। यह वास्तव में आपके द्वारा किए जा रहे कार्यों पर कोई प्रभाव नहीं डालना चाहिए, जैसा कि मैंने कहा था, WinAPI आम तौर पर उन्हें एक दूसरे के रूप में उपयोग कर सकता है। हालांकि, अगर आप एक / जब निर्देशिका नामों के बीच एक उम्मीद करते हैं तो तीसरे पक्ष के अनुप्रयोग शायद तोड़ देंगे। यदि आप विंडोज का उपयोग कर रहे हैं, तो \ साथ चिपके रहें। यदि आप यूनिक्स या URI का उपयोग कर रहे हैं (जिनके पास यूनिक्स पथ में उनकी नींव है, लेकिन यह पूरी तरह से एक और कहानी है), तो / उपयोग करें।

सी # के संदर्भ में: यह ध्यान दिया जाना चाहिए, क्योंकि यह तकनीकी रूप से एक सी # प्रश्न है, यदि आप अधिक "पोर्टेबल" सी # कोड लिखना चाहते हैं जो यूनिक्स और विंडोज दोनों पर काम करता है (भले ही सी # मुख्य रूप से एक विंडोज भाषा है), आप हो सकता है कि Path.DirectorySeparatorCharPath.DirectorySeparatorChar फ़ील्ड का उपयोग करना Path.DirectorySeparatorChar इसलिए आपका कोड उस सिस्टम पर पसंदीदा विभाजक का उपयोग करता है, और पथ को सही तरीके से जोड़ने के लिए Path.Combine() का उपयोग करता है।

मैं फ़ाइल पथों में \ और / बीच के अंतर के बारे में सोच रहा था। मैंने देखा है कि कभी-कभी पथ में होता है / और कभी-कभी यह \ साथ होता है।

यह अच्छा होगा अगर कोई भी \ और / का उपयोग कब समझा सकता है।


दिए गए उत्तरों के अलावा, यह उल्लेखनीय है कि \ प्रोग्रामिंग भाषाओं, पाठ संपादकों और सामान्य प्रणालियों में विशेष वर्णों (जैसे \n \t ) के लिए व्यापक रूप से उपयोग किया जाता है जो व्याख्यात्मक विश्लेषण लागू करते हैं।

यदि आप उदाहरण के लिए प्रोग्रामिंग कर रहे हैं, तो कभी-कभी इसका उपयोग करने के लिए किसी अन्य ( \\ ) के साथ बैकस्लैश से बचने की आवश्यकता होने पर भी असुविधाजनक होती है - या सी # @"\test" जैसे एस्केपिंग स्ट्रिंग का उपयोग करने की आवश्यकता होती है।

बेशक, जैसा कि पहले उल्लेख किया गया है, वेब यूआरआई मानक द्वारा आगे स्लैश का उपयोग करते हैं लेकिन दोनों slashes नवीनतम और सबसे आम कमांड लाइन उपकरण में काम करते हैं

अद्यतन: थोड़ी सी खोज करने के बाद, ऐसा लगता है कि उस समय डॉस और यूनिक्स-आधारित सिस्टम की उम्र में, "कंप्यूटर इतिहास" में वापस / और \ "की पूरी कहानी दिखाई देती है। HowToGeek इस कहानी के बारे में एक दिलचस्प article

संक्षेप में, डॉस 1.0 को शुरुआत में आईबीएम द्वारा कोई निर्देशिका समर्थन नहीं मिला था, और / किसी अन्य ("स्विचिंग") कमांड कार्यक्षमता के लिए इस्तेमाल किया गया था। जब निर्देशिका 2.0 संस्करण में पेश की गई थी, / पहले से ही उपयोग में थी, तो आईबीएम ने दृष्टिहीन निकटतम प्रतीक चुना, जो \ था। दूसरी तरफ, यूनिक्स मानक रूप से इस्तेमाल / निर्देशिकाओं के लिए।

जब उपयोगकर्ता कई अलग-अलग प्रणालियों का उपयोग करना शुरू कर देते थे, तो वे ओएस डेवलपर्स को दोनों मामलों में सिस्टम बनाने का प्रयास करने के लिए भ्रमित करना शुरू कर देते थे - यह यूआरएल के हिस्से में भी लागू होता है, क्योंकि कुछ ब्राउज़र http: \\ www.test का समर्थन करते हैं । com \ go प्रारूप। हालांकि सामान्य रूप से इसमें कमी आई थी, लेकिन विंडोज़ पर दोनों स्लैश के समर्थन के प्रयास के साथ, पूरी बात अभी भी पिछड़े संगतता कारणों के लिए खड़ी है, भले ही वे अब डॉस पर आधारित न हों।


आपको या तो सी # में उपयोग नहीं करना चाहिए। आपको हमेशा Path वर्ग का उपयोग करना चाहिए। इसमें Path.Combine नामक एक विधि शामिल है जिसका उपयोग विभाजक को स्वयं निर्दिष्ट किए बिना पथ बनाने के लिए किया जा सकता है।

उदाहरण का उपयोग:

string fullPath = System.IO.Path.Combine("C:", "Folder1", "Folder2", "file.txt");

यूनिक्स-आधारित सिस्टम पर \ एक बच निकलने वाला चरित्र है, यानी, पार्सर को बताता है कि यह एक जगह है और कथन का अंत नहीं है। यूनिक्स सिस्टम पर / निर्देशिका विभाजक है।

विंडोज \ पर निर्देशिका विभाजक है, लेकिन फ़ाइल या निर्देशिका नामों में उपयोग नहीं किया जा सकता है।


  • एक यूआरएल, जो आरएफसी 1738 में मानकीकृत है, हमेशा प्लेटफॉर्म पर ध्यान दिए बिना, आगे की स्लैश का उपयोग करता है।
  • एक फ़ाइल पथ और एक यूआरआई अलग हैं। \ Windows फ़ाइल पथ में सही है और / एक यूआरआई में सही है।
  • बैकस्लाश के साथ यूआरआई का सामना करते समय कई ब्राउज़रों (अर्थात्, फ़ायरफ़ॉक्स और ओपेरा) आपदाजनक रूप से विफल हो जाते हैं।
  • System.IO.Path.DirectorySeparatorChar वर्तमान पथ विभाजक पाने के लिए

This प्रासंगिक संसाधन हो सकता है।


\ Windows स्थानीय फ़ाइल पथ और नेटवर्क पथ के लिए उपयोग किया जाता है:

C:\Windows\Temp\ या \\NetworkSharedDisk\Documents\Archive\

/ मानक यूआरआई द्वारा आवश्यक है:

http://www..com/





slash