2010-09-17 13 views
10

.NET कंसोल एप्लिकेशन में रिक्त स्थान के साथ पथ पारित करने के लिए आपको इससे बच जाना चाहिए। शायद बच नहीं लेकिन दोहरे उद्धरण चिह्नों के साथ चारों ओर:रिक्त स्थान वाले पथ से कैसे बचें

myapp.exe --path C:\Program Files\MyApp` 

हो जाता है

new string[] { "--path", "C:\Program", "Files\MyApp" } 

लेकिन

myapp.exe --path "C:\Program Files\MyApp" 

हो जाता है

new string[] { "--path", "C:\Program Files\MyApp" } 

और यह ठीक काम करता है और आप आसानी से कि पार्स कर सकते हैं ।

मैं मानकों के परिणामस्वरूप सेट के साथ एक अतिरिक्त एक के साथ दिए गए मापदंडों के सेट का विस्तार करने और एक नई प्रक्रिया शुरू करना चाहते हैं:

new ProcessStartInfo(
    Assembly.GetEntryAssembly().Location, 
    String.Join(" ", Enumerable.Concat(args, new[] { "--flag" }))) 

यह myapp.exe --path C:\Program Files\MyApp --flag जहां पथ अपने एस्केपिंग चला जाता है हो जाता है।

सामान्य समाधान के साथ इसे कैसे हल करें? (प्रत्येक पैरामीटर के मूल्य को खोजे बिना मैन्युअल रूप से भागने और उद्धृत करने की आवश्यकता के बिना)

उत्तर

5

मुझे नहीं लगता कि यह स्थान संभव है क्योंकि अंतरिक्ष सीएलआई तर्कों के लिए डिलीमीटर है इसलिए उन्हें भागने की आवश्यकता होगी।

आप इसे एक विस्तार विधि में काफी अच्छी तरह से निकाल सकते हैं ताकि आप उपरोक्त कोड में args.Escape() चला सकें।

public static string[] Escape(this string[] args) 
{ 
    return args.Select(s => s.Contains(" ") ? string.Format("\"{0}\"", s) : s).ToArray(); 
} 
+0

बढ़िया! धन्यवाद! बीटीडब्ल्यू, मुझे लगता है कि 'स्ट्रिंग [] 'और' आईनेमरेबल ' सूट यहाँ अच्छी तरह से – abatishchev

4

बस हर पैरामीटर उद्धृत करें। यह ...

myapp.exe "--path" "C:\Program Files\MyApp" "--flag" 

... एक पूरी तरह से वैध कमांड लाइन है और वही करता है जो आप चाहते हैं।

+0

यानी चुनें 'चुनें (एस => स्ट्रिंग.फॉर्मैट ("\" {0} \ "", एस))। बहुत अच्छा लगता है लेकिन @ amarsuperstar का समाधान मुझे थोड़ा और पसंद है :) धन्यवाद, हेन्ज़ी – abatishchev

+0

उस स्थिति में काम नहीं करता है जहां पथ का पिछला भाग है "\" जैसे "सी: \ प्रोग्राम फ़ाइलें \ MyApp \" – EdmundYeung99

+1

@ EdmundYeung99: हाँ, यह वास्तव में एक मुश्किल मुद्दा है। निम्नलिखित प्रश्न में समस्या के आसपास काम करने के कुछ प्रयास शामिल हैं: http://stackoverflow.com/q/5510343/87698 – Heinzi

संबंधित मुद्दे