2012-02-18 19 views
31

मैं इस तरह की तलाश कर रहा हूं कि मैं अपने डब्ल्यूपीएफ एप्लिकेशन में कमांड लाइन तर्कों को पार्स कर सकता हूं, जो उपयोगकर्ता द्वारा पारित तर्क के मूल्य को पढ़ने का एक तरीका है।डब्ल्यूपीएफ कमांड लाइन तर्क, एक स्मार्ट तरीका?

एक उदाहरण

application.exe /setTime 5 

के रूप में है वहाँ मुझे कुछ कोड जहां मैं सिर्फ इतना कहना कर सकते हैं के लिए एक तरीका:

MessageBox.Show(arg("setTime")); 

कौन सा होगा उत्पादन 5

कार्य समाधान

How to create smart WPF Command Line Arguments

+2

संबंधित [डब्ल्यूपीएफ कमांड लाइन] (http://stackoverflow.com/questions/426421/wpf-command-line) – Vache

+1

क्या आपने कोडप्लेक्स को देखने का प्रयास किया है? कमांड लाइन पार्सिंग के लिए कई अलग-अलग कार्यान्वयन हैं। –

+0

कमांड लाइन तर्कों को संभालने के लिए कई पुस्तकालय हैं, देखें: http://stackoverflow.com/questions/491595/best-way-to-parse-command-line-arguments-in-c –

उत्तर

76

जब आप कमांड लाइन को पार्स करते हैं तो तर्क के रूप में तर्क के साथ Dictionary में तर्क/मान जोड़े डाल दें। फिर अपने arg("SetTime") हो जाएगा:

MessageBox.Show(dictionary["SetTime"]); 

(जाहिर है आप नहीं करना चाहते हैं वास्तविक शब्दकोश सार्वजनिक किया जाना है।)

पहली जगह में तर्क आप उपयोग कर सकते हैं पाने के लिए:

string[] args = Environment.GetCommandLineArgs(); 

यह सभी तर्क वापस कर देगा, इसलिए आपको दो चरणों में सरणी को पार्स करने की आवश्यकता होगी (पहली बार यह जांचने के बाद कि लंबाई दो + 1 का एक बहु है):

MSDN Page - - सरणी के पहले तत्व को क्रियान्वित कार्यक्रम का नाम है तो अपने पाश में से एक से शुरू करने के लिए की जरूरत है:

for (int index = 1; index < args.Length; index += 2) 
{ 
    dictionary.Add(args[index], args[index+1]); 
} 

यह दो के चरणों में लूप के रूप में आपके द्वारा निर्धारित प्रत्येक तर्क मूल्यों की एक जोड़ी है: पहचानकर्ता और वास्तविक मूल्य खुद, उदाहरण के लिए

string value; 
if (dictionary.TryGetValue(arg, out value)) 
{ 
    // Do what ever with the value 
} 

इसका मतलब है आप किसी भी क्रम में तर्क हो सकता है:

my.exe -arg1 value1 -arg2 value2 

तो फिर तुम बस अगर कुंजी -arg1 शब्दकोश में है और फिर पढ़ा यह मूल्य अगर तर्क देखकर द्वारा निर्दिष्ट किया जाता देख सकते हैं और उन तर्कों को छोड़ दें जिन्हें आप निर्दिष्ट नहीं करना चाहते हैं।

+0

कार्य करना, बहुत आसान था मैंने सोचा था कि यह था। बहुत बहुत धन्यवाद –

+3

क्या होगा यदि असमान संख्या में पैरामीटर दिए गए हैं? अपवाद उपयोग से बचने के लिए (int अनुक्रमणिका = 1; अनुक्रमणिका

+0

@JPollack - यदि आपके पास तर्कों की असमान संख्या है तो कुछ याद आ रही है, इसलिए आपको एक त्रुटि की रिपोर्ट करनी होगी। – ChrisF

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