2012-05-30 5 views
7

Ich habe ein Problem, wo ich einen Befehl Eingabeaufforderung aus einem C-Programm ausführen muss. Hier ist, was ich tatÄndern des Verzeichnisses von innerhalb eines c-Programms unter Windows mit Systembefehl

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


int main(){ 



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

} 

Das Problem ist, ich in Benutzer auf CD wollen und dann den Befehl Dir ausführen, wo, wie sie derzeit das Programm gibt, die es den angegebenen Pfad nicht finden können, und die Dir wird in den übergeordneten Prozess ausgeführt Verzeichnis, in dem sich die Programmquelldatei befindet.

Die eigentliche Aufgabe, die ich tun möchte, ist nur eine Java-Datei aus einem bestimmten Verzeichnis aus einem C-Programm ausführen möchten. Diese Java-Datei befindet sich in C: \ Users \ Abdullah \ pro. Das übergeordnete Verzeichnis meines C-Programms ist C: \ Users \ Cprog. Bitte beraten Sie, wie kann ich dies tun

+0

unten einen Blick auf meine Antwort haben Bitte. Sagen Sie mir, ob es geholfen hat oder nicht, oder irgendwelche weiteren Fragen, die Sie möglicherweise haben, nachdem Sie sich das Beispiel von Microsoft angeschaut haben. Randnotiz: Ist es wirklich notwendig, dass das aktuelle Verzeichnis auch in dieses Verzeichnis geändert wird? –

+0

Vielen Dank für Ihre Antwort. Das Problem ist, dass das Programm, das ich in dem bestimmten Verzeichnis ausführen muss, mit einem Skript ausgeführt werden soll. e-g cd in das Arbeitsverzeichnis, dann run.bat --arg1 arg1 --arg2 arg2 usw. Also kann ich keinen Prozess starten, um das zu tun, nehme ich an:/ – Abdullah

+1

Meine Antwort entsprechend aktualisiert. Siehe http://msdn.microsoft.com/en-us/library/windows/desktop/ms682425%28v=vs.85%29.aspx und der aktuelle Verzeichnisparameter. –

Antwort

5

Ihr Programm hat einige falsche Annahmen. Zunächst einmal sind "cd" und "dir" keine Programme, sondern Befehle, die in die Shell eingebaut sind, cmd.exe. Zweitens vermute ich, dass Sie das aktuelle Verzeichnis überhaupt nicht ändern müssen.

Wie auch immer, da dies ein Windows-System ist, würde ich look at an example on how to start a program with CreateProcess().

Um das aktuelle Verzeichnis zu ändern, überprüfen Sie die lpCurrentDirectory parameter des Aufrufs CreateProcess().

5

system() startet einen neuen Prozess. Dieser neue Prozess ändert sein aktuelles Verzeichnis und endet dann. Das aktuelle Verzeichnis des Programmprozesses ändert sich nicht.

Sie möchten chdir() (oder _chdir()).

+0

Alternativ kann er einen einzelnen Aufruf von 'system' verwenden. Etwas wie 'system (" cd \ Users & dir ") könnte funktionieren. (Ich denke '&' ist der Charakter erforderlich. Es wäre ';' unter Unix.) –

+1

... oder nur 'system (" Dir \ Users ");' –

+0

Nichts funktioniert:/oder vielleicht bin ich zu dumm . Ich möchte nur eine Java-Datei aus einem bestimmten Verzeichnis aus einem C-Programm ausführen. Diese Java-Datei befindet sich in C: \ Users \ Abdullah \ pro. Das übergeordnete Verzeichnis meines C-Programms ist C: \ Users \ Cprog. Bitte beraten Sie, wie kann ich dies tun – Abdullah

0

'cd' ist KEINE separate ausführbare Datei, die Sie auszuführen versuchen. Normalerweise ist 'cd' ein eingebauter Befehl der Shell/des Befehls. Sie können 'cd' NICHT mit 'system()' ausführen und erwarten, dass es in Ihrem Programm entsprechend funktioniert. Sie müssen die Funktion 'chdir()' (oder Systemaufruf) verwenden, wenn die Verzeichnisänderung in Ihrem Programm ausgeführt werden soll. Konsultieren Sie die Handbuchseite für 'chdir()'.

0

sollte diese Arbeit:

system("dir Users\\whatEverNextFolder > test.txt"); 
Verwandte Themen