2010-05-06 13 views
6

के साथ System.IO.Path या समकक्ष उपयोग क्या सिस्टम या आईओ.पाथ क्लास, या कुछ समान ऑब्जेक्ट का उपयोग यूनिक्स स्टाइल पथ को प्रारूपित करने के लिए संभव है, जो पैथ कक्षा में समान कार्यक्षमता प्रदान करता है? उदाहरण के लिए, मैं कर सकते हैं:यूनिक्स पथ

Console.WriteLine(Path.Combine("c:\\", "windows")); 

कौन सा पता चलता है:

"C:\\windows" 

लेकिन मैं इसे सिर्फ मेरे लिए उन्हें पराजयों फ़ॉरवर्ड स्लैश (/) के साथ एक समान बात की कोशिश है।

Console.WriteLine(Path.Combine("/server", "mydir")); 

कौन सा पता चलता है:

"/server\\mydir" 

उत्तर

3

इस मामले में मैं वर्ग System.Uri या System.UriBuilder का प्रयोग करेंगे।

साइड नोट: यदि आप अपने .NET कोड को लिनक्स-सिस्टम पर मोनो-रनटाइम के साथ चलाते हैं, तो पथ वर्ग को आपके अपेक्षित व्यवहार को वापस करना चाहिए। पाथ क्लास का उपयोग अंतर्निहित सिस्टम द्वारा प्रदान की जाने वाली जानकारी प्रदान की जाती है।

+0

इसके लिए धन्यवाद, लेकिन मुझे इनमें से किसी भी वर्ग में कोई तरीका नहीं मिल रहा है जो कि कॉम्बाइन() के समतुल्य दिखता है? –

+0

मुझे यह विधि उपयोगी नहीं मिली ... यूआरआई स्वरूपण की आवश्यकता है। उरीफॉर्मेट अपवाद: अमान्य यूआरआई: यूआरआई का प्रारूप निर्धारित नहीं किया जा सका: टेम्पलेट/1024x768 / –

3

आपको बड़ी समस्याएं हैं, यूनिक्स विंडोज़ की तुलना में फ़ाइल नाम में अक्षर स्वीकार करता है। इस कोड को ArgumentException साथ बम जाएगा, "पथ में अवैध वर्ण":

string path = Path.Combine("/server", "accts|payable"); 

आप मज़बूती से यूनिक्स पथ के लिए Path.Combine() का उपयोग नहीं कर सकते।

3

Path.CombinePath.DirectorySeperatorChar और Path.VolumeSeparatorChar के मूल्यों का उपयोग करता है, और इन क्रम में वर्ग पुस्तकालयों द्वारा निर्धारित होते हैं - इसलिए यदि आप बहुत आगे केवल Path.Combine कॉल, Environment.SpecialFolder मूल्यों, और का उपयोग कर अपने कोड लिखने, यह ठीक हर जगह चला जाएगा, के बाद से मोनो (और संभवतः किसी भी .NET रनटाइम) उन पथों को प्राप्त करने और बनाने के मूल तरीके को लागू करता है जो किसी भी प्लेटफॉर्म पर चलता है। (आपकी दूसरी उदाहरण के लिए, उदाहरण के लिए, मेरे लिए /server/mydir दिखाए, लेकिन पहला उदाहरण c:\/windows देता है)

आप चाहते हैं एक UNIX-विशिष्ट पथ सभी मामलों में हार्ड-कोडेड हैं, तो Path.Combine आप कुछ भी खरीद नहीं है: Console.WriteLine ("/server/mydir"); क्या करता है आप ओपी में चाहते हैं।

जैसा कि हंस ने कहा था, अलग-अलग फाइल सिस्टम के पास अनुमत वर्णों, पथ की लंबाई और इत्यादि के लिए अलग-अलग नियम हैं, इसलिए किसी भी क्रॉस-प्लेटफ़ॉर्म प्रोग्रामिंग के साथ सबसे अच्छा अभ्यास, स्वयं को प्रतिबंधित सुविधाओं के अंतरण का उपयोग करने के लिए प्रतिबंधित करना है आपके द्वारा लक्षित फाइल सिस्टम जिन्हें आप लक्षित कर रहे हैं। मामले-संवेदनशीलता के मुद्दों को भी देखें।