12

में लंबे तार (एक तर्क के रूप में) पास करना मैं सी # में एक कंसोल एप्लिकेशन बना रहा हूं, जिसमें निष्पादन पर, यह डेटा का एक समूह पारित किया जाता है। उनमें से तीन छोटे तार हैं, जैसे उपयोगकर्ता नाम, पासवर्ड इत्यादि। हालांकि, उनमें से एक एक लंबा एक्सएमएल दस्तावेज है।एक कंसोल अनुप्रयोग

कमांड लाइन तर्क के रूप में उन्हें पारित करते समय तार कितने समय तक हो सकते हैं?

निष्पादन पर सी # कंसोल ऐप में डेटा में गुजरने के लिए वहां कोई बेहतर विकल्प हैं?

+4

फ़ाइल में XML डेटा संग्रहीत करें, और केवल फ़ाइलपैथ को कमांड लाइन टूल पर तर्क के रूप में पास करें। – nemesv

+3

या मानक इनपुट के माध्यम से एक्सएमएल पास करें। भले ही, अच्छा सवाल है। – orip

उत्तर

16

सीमाओं के बारे में here following मिला:

  • CreateProcess समारोह के लिए अधिकतम कमांड लाइन की लंबाई 32767 वर्ण है। यह सीमा UNICODE_STRING संरचना से आता है।

  • CreateProcess प्रक्रियाओं बनाने के लिए मुख्य कार्य है, इसलिए यदि आप Win32 के लिए सीधे बात कर रहे हैं, तो वह केवल सीमा के बारे में आप चिंता करने की ज़रूरत है। लेकिन अगर आप किसी अन्य माध्यम से CreateProcess तक पहुंच रहे हैं, तो आपके द्वारा यात्रा किए जाने वाले पथ में अन्य सीमाएं हो सकती हैं।

  • आप CMD.EXE आदेश प्रोसेसर का उपयोग कर रहे हैं, तो आप भी 8192 चरित्र कमांड लाइन की लंबाई CMD.EXE द्वारा लगाए गए सीमा के अधीन हैं।

  • आप ShellExecute/पूर्व समारोह का उपयोग कर रहे हैं, तो आप INTERNET_MAX_URL_LENGTH (2048 के आसपास) कमांड लाइन लंबाई सीमा ShellExecute/पूर्व कार्यों द्वारा लगाए गए के अधीन हो जाते हैं। (आप Windows 95 पर चल रहे हैं, तो सीमा केवल MAX_PATH है।)

क्या बेहतर तरीके या वैकल्पिक - उपयोग फ़ाइल, शायद एक्सएमएल, अपने सभी वहाँ मानकों के साथ, और इस फ़ाइल कमांड लाइन के रूप में पारित तर्क।

3

यदि एक्सएमएल आपके प्रोग्राम का मुख्य इनपुट है, तो मैं दृढ़ता से सुझाव देता हूं कि आप इसे कमांड लाइन तर्क (जो इस मामले में असामान्य प्रतीत होता है) के बजाय मानक इनपुट से पढ़ते हैं। यह XML में पारित करने के लिए अपने कार्यक्रम तीन तरीकों में से उन देना होगा:

  • अपने कार्यक्रम पर अमल, और मैन्युअल रूप से एक अन्य कार्यक्रम के उत्पादन का उपयोग कुछ एक्सएमएल
  • में टाइप करें: other_program … | program …
  • एक फ़ाइल से मानक इनपुट अनुप्रेषित : program … < input.xml

यदि एक्सएमएल, हालांकि, मुख्य इनपुट नहीं है, तो मैं इनपुट फ़ाइल नाम निर्दिष्ट करने के लिए कमांड लाइन स्विच प्रदान करता हूं;

  • पैरामीटर के माध्यम से इनपुट फ़ाइल निर्दिष्ट करें:: जो आप एक तरह से एक्सएमएल निर्दिष्ट करने के लिए देता है program ... -f input.xml

इसके अलावा सलाह से, मैं अपने वास्तविक सवाल ठीक उत्तर नहीं दे सकता है, लेकिन मैं में देखा है अतीत कि विंडोज 'cmd.exe (विंडोज 2000 या एक्सपी के तहत आईआईआरसी) कमांड की अधिकतम लंबाई के संबंध में काफी सीमित था।

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