2010-06-08 11 views
5

मेरे पास यह विंडोज कंसोल ऐप है जो फ़ाइल लेता है, कुछ गणना करता है, और उसके बाद आउटपुट को निर्दिष्ट फ़ाइल में लिखता है। इनपुट "app.exe -input fullfilename" प्रारूप में निर्दिष्ट है। मुझे इस एप्लिकेशन को मेरे सी ++ प्रोग्राम से कॉल करने की आवश्यकता है, लेकिन मुझे फाइलों के पथों में रिक्त स्थान के साथ समस्या है। जब मैं एप्लिकेशन सीधे cmd.exe से टाइप करके (स्पष्टता के लिए आउटपुट फ़ाइल निर्दिष्ट किए बिना) फोनcstdlib सिस्टम के माध्यम से रिक्त स्थान के साथ पैरामीटर कैसे पास करें

"c:\first path\app.exe" -input "c:\second path\input.file" 

सब कुछ उम्मीद के रूप में काम करता है। लेकिन, जब मैं cstdlib std :: प्रणाली का उपयोग कर की कोशिश() फ़ंक्शन, अर्थात

std::system(" \"c:\\first path\\app.exe\" -input \"c:\\second path\\input.file\" "); 

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

+0

क्या आपने रिक्त स्थान से बचने की कोशिश की है? – Troubadour

+0

यूनिक्स सिस्टम में, यह खोल की ज़िम्मेदारी है, और इसे काम करना चाहिए। मुझे यकीन नहीं है कि विंडोज पर कौन सी ज़िम्मेदारी है, लेकिन मुझे लगता है कि यह एक फर्क पड़ता है कि आप एमएसवीसी ++ या मिनजीडब्ल्यू या सिगविन का उपयोग कर रहे हैं या नहीं। क्या आप हमें बता सकते हैं कि आप किस कंपाइलर का उपयोग कर रहे हैं? –

+0

यह काम करता प्रतीत होता है, यह सुनिश्चित नहीं है कि क्यों: 'std :: system (" \ "\" c: \\ पहला पथ \\ app.exe \ "-input \" c: \\ दूसरा पथ \\ input.file \ "\" ");' – Naveen

उत्तर

0

std :: system() कॉल में उद्धरण डालने का प्रयास न करें। निम्नलिखित का प्रयास करें:

std::system("c:\\first\\ path\\app.exe -input c:\\second\\ path\\input.file"); 
1

के बजाय std :: प्रणाली(), यदि आप Windows एपीआई से _wspawnv समारोह का उपयोग करना चाहिए। यदि आप पथ में प्रोग्राम को खोजना चाहते हैं, तो इसके लिए पूर्ण पथ निर्दिष्ट करने के बजाय _wspawnvp का उपयोग करें।

 
#include <stdio.h> 
#include <wchar.h> 
... 
const WCHAR *app = L"C:\\path to\\first app.exe"; 
const WCHAR *argv[] = {app, L"-input", L"c:\\second path\\input file.txt"}; 
_wpspawnv(_P_WAIT, app, argv); 

तुम भी/_spawnvp _spawnv इस्तेमाल कर सकते हैं यदि आप 100% यकीन है कि अपने इनपुट फ़ाइल नाम, कभी ASCII से कुछ और होते हैं कभी नहीं होगा रहे हैं।

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