2012-05-30 15 views
7

का उपयोग कर विंडोज़ के तहत एक सी प्रोग्राम के अंदर से निर्देशिका को बदलना मुझे एक समस्या है जहां मुझे सी प्रोग्राम के अंदर से कमांड प्रॉम्प्ट कमांड चलाया जाना है। यहाँ मैं क्या कियासिस्टम कमांड

#include<stdio.h> 
#include<stdlib.h> 


int main(){ 



system("cd \Users"); 
system("Dir"); 

} 

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

वास्तविक कार्य जो मैं करना चाहता हूं वह सिर्फ एक सी प्रोग्राम के अंदर से किसी विशेष निर्देशिका से जावा फ़ाइल चलाने के लिए है। वह जावा फ़ाइल सी में है: \ उपयोगकर्ता \ Abdullah \ pro। मेरा सी प्रोग्राम की मूल निर्देशिका सी: \ उपयोगकर्ता \ Cprog है। कृपया सलाह दें कि मैं यह कैसे कर सकता हूं

+0

कृपया नीचे मेरा उत्तर पर एक नजर है। मुझे बताएं कि क्या इससे मदद मिली है या नहीं, या माइक्रोसॉफ्ट से उदाहरण देखने के बाद आपके पास कोई और प्रश्न हो सकता है। साइड नोट: क्या यह वास्तव में आवश्यक है कि वर्तमान निर्देशिका भी उस निर्देशिका में बदल दी गई है? –

+0

आपके उत्तर के लिए धन्यवाद। समस्या यह है कि जिस प्रोग्राम को मुझे विशेष निर्देशिका में निष्पादित करने की आवश्यकता है वह एक स्क्रिप्ट का उपयोग करके चलाना है। ई-जी सीडी कार्यशील निर्देशिका में, run.bat --arg1 arg1 --arg2 arg2 इत्यादि। इसलिए मैं ऐसा करने की प्रक्रिया शुरू नहीं कर सकता हूं:/ – Abdullah

+1

तदनुसार मेरा उत्तर अपडेट किया गया। Http://msdn.microsoft.com/en-us/library/windows/desktop/ms682425%28v=vs.85%29.aspx और वर्तमान निर्देशिका पैरामीटर देखें। –

उत्तर

5

आपके कार्यक्रम में कुछ गलत धारणाएं हैं। सबसे पहले, "सीडी" और "डीआईआर" प्रोग्राम नहीं हैं, लेकिन शेल, cmd.exe में बनाए गए आदेश। दूसरा, मुझे संदेह है कि आपको वर्तमान निर्देशिका को बदलने की जरूरत नहीं है।

किसी भी तरह से, क्योंकि यह एक विंडोज सिस्टम है, मैं look at an example on how to start a program with CreateProcess() होगा।

वर्तमान निर्देशिका को बदलने के लिए, CreateProcess() कॉल के lpCurrentDirectory parameter देखें।

5

system() एक नई प्रक्रिया शुरू करता है। यह नई प्रक्रिया को वर्तमान निर्देशिका में बदलती है, फिर समाप्त होती है। आपके प्रोग्राम की प्रक्रिया की वर्तमान निर्देशिका नहीं बदली है।

आप chdir() (या _chdir()) चाहते हैं।

+0

वैकल्पिक रूप से, वह 'सिस्टम' पर एक ही कॉल का उपयोग कर सकता है। कुछ सिस्टम की तरह कुछ ("सीडी \ उपयोगकर्ता और डीआईआर") 'काम कर सकता है। (मुझे लगता है कि 'चरित्र' आवश्यक है। यह यूनिक्स के तहत ';' होगा।) –

+1

... या बस 'सिस्टम ("डिर \ उपयोगकर्ता"); ' –

+0

कुछ भी काम नहीं कर रहा है:/या हो सकता है कि मैं बहुत गूंगा हूँ । मैं सिर्फ एक सी प्रोग्राम के अंदर से एक विशेष निर्देशिका से एक जावा फ़ाइल चलाने के लिए चाहता हूँ। वह जावा फ़ाइल सी में है: \ उपयोगकर्ता \ Abdullah \ pro। मेरा सी प्रोग्राम की मूल निर्देशिका सी: \ उपयोगकर्ता \ Cprog है। कृपया सलाह दें कि मैं यह – Abdullah

0

'सीडी' एक अलग निष्पादन योग्य नहीं है जिसे आप निष्पादित करने का प्रयास कर रहे हैं। आम तौर पर 'सीडी' एक खोल/कमांड का अंतर्निहित कमांड होता है। आप 'cd' को 'system()' के साथ निष्पादित नहीं कर सकते हैं और इसे अपने प्रोग्राम में तदनुसार काम करने की उम्मीद करते हैं। यदि आप चाहते हैं कि आपके प्रोग्राम के अंदर निर्देशिका बदलना है तो आपको 'chdir()' फ़ंक्शन (या सिस्टम कॉल) का उपयोग करना होगा। 'Chdir()' के लिए मैन्युअल पृष्ठ से परामर्श लें।

0

यह काम करना चाहिए:

system("dir Users\\whatEverNextFolder > test.txt"); 
संबंधित मुद्दे