Hi Leute,
Jetzt muss ich euch nochmal mit einer Frage nerven.
Ich bin gerade dabei mir eine kleine DOS Anwendung zu schreiben bei der ich vordefinierte Pfade über einen Shortcut aufrufe um in der DOS Box von XP das Verzeichnis zu wechseln.
Dafür möchte ich den Befehl Chdir bzw cd mittels der funktion System() übergeben.
Wenn ich einfach nur "cd" übergebe, klappt es auch dass ich info über den aktuellen Pfad bekomme.
Auch bekomme ich eine Fehlermeldung wenn ich wissentlich ein falsches Verzeichnis angebe.
Das sagt mir das der Befehl schon übergeben wird.
Nur leider wenn ich einen korrekten Pfad oder Verzeichnis angeben dann passiert nüx. Selbst über Errno bekomme ich die 0 zurück in einem solchen fall.
Jetzt frage ich mich ob einer von euch ein Idee hat, wie über system() dem CD befehl dazu bewegen kann, dass verzeichnis zu wechseln, Bzw. gibt es noch einen anderen weg DOS befehle an die Box zu übergeben?
Bei der Gelegenheit ist mir auch aufgefallen dass es anscheinend nicht klappt mit z.b. system("D:") das Laufwerk zu wechseln.
Für Rat wäre ich sehr dankbar.
Rüdiger
Programmieren - alles kontrollieren 4.941 Themen, 20.715 Beiträge
Welchen Compiler benutzt Du? Es gibt nämlich eine Funktion namens SetCurrentDirectory() die Dir weiterhelfen könnte. Weiss nur gerade nicht obs Win32API oder MFC ist.
Ich benutze zur Zeit den Open Watcom.
Weil ich das Gefühl habe das mir dieser (sonst eigentlich nicht schlechte) Compiler nicht viel Weiterhilft (Thema MFC usw.) bin ich gerade dabei den VC++ 2005 express edition und den Borland C++ BuilderX auszutesten.
Aber danke für den Tipp ich werde mal schauen ob ich irgendwo bezüglich der Funktion Fündig werde.
Es könnte auch helfen wenn Du einmal genau beschreibst was Du machen willst. Muss es unbedingt ein DOS-Programm sein? Warum brauchst Du die Dosbox? Unter Windows kannst Du auch 32-Bit Programme auf der Konsole laufen lassen :)
Vielleicht gibts ja eine direktere Lösung für Dein Problem :)
Also Hintergrund ist folgender: Ich arbeite gerade ein C++ Buch vom Autor Erlenkötter durch (kann ich übrigens jedem Einsteiger empfehlen). Um die Beispiele und Aufgaben auszutesten starte ich diese in der DosBox (mit ausführen "cmd" aufgerufen). Weil ich die Beispiele logischerweise nicht ins Root Verzeichnis compiliere muss ich mich immer durch diverse unterverzeichnisse hangeln, bzw. mit einer Batch datei dorthinwechseln. Das mit der Batch war mir allerdings zu unelegant, also dachte ich mir ich setze mal meine neuen Programmierkenntnisse um und schreibe mir eine kleine Dos Anwendung die ich "shdir" (SHortcutDirectory) getauft habe. In dem C++ Programm habe ich einem Array ein paar typische Pfade zu denen ich regelmässig wechseln muss hinterlegt. Ich will dann über die DOS Befehlszeile "shdir 00" eingeben und so zum ersten im Array hinterlegten Pfad wechseln. Mit "shdir 01" zum 2. hinterlegten pfad usw. bis zu 99 möglichen hinterlegten Pfaden.
Das Programm steht soweit, dass es die übergebenen Parameter korrekt auswertet, auch ein Anzeige für alle hinterlegten Pfade existiert bereits.
Mir fehlt jetzt nur noch der schritt dass Programm dazu zu bringen auch Tatsächlich zu dem hinterlegten Pfad zu springen. Mein Ansatz war mit der funktion system() den Chdir befehl zu übergeben.
Sicher gibt es für dieses Problem auch elegantere Ansätze z.b. eine GUI anwendung in der ich die gewünschten Pfade anklicke, allerdings bin ich von Win Programmierung noch einen großen Schritt entfernt. Falls du da übrigens gute Bücher empfehlen kannst, wäre ich für jeden Tipp Dankbar ;)
Hallo
Ich finde die Lösung mit der Batchdatei besser als die mit dem C++ - Programm. Mit einem Script in seine Entwicklungsumgebung zu gelangen, gemäss meinen Erfahrungen, durchaus gebräuchlich.
Nun zu deinem CHDIR - Problem:
C:\>chdir /?
Wechselt das Verzeichnis oder zeigt dessen Namen an.
CHDIR [/D] [Laufwerk:][Pfad]
CHDIR [..]
CD [/D] [Laufwerk:][Pfad]
CD [..]
.. Gibt an, dass Sie in das übergeordnete Verzeichnis wechseln möchten.
Geben Sie "CD Laufwerk:" ein, um das aktuelle Verzeichnis auf dem angegebenen
Laufwerk anzuzeigen. Mit CD ohne Parameter wird das aktuelle Laufwerk und
Verzeichnis angezeigt.
Verwenden Sie die /D-Option, um zusätzlich zum Wechseln des Verzeichnisses
auch das aktuelle Laufwerk zu wechseln.
Wenn die Befehlserweiterungen aktiviert sind, wird CHDIR folgendermaßen
verändert:
Der angegebene Verzeichnisname wird so konvertiert, dass dieser bezüglich
Groß- und Kleinschreibung dem Namen auf dem Laufwerk entspricht. So wird durch
CD C:\TEMP der aktuelle Pfad auf das Verzeichnis C:\Temp festgelegt, wenn ein
Verzeichnis mit diesem Namen auf dem Laufwerk existiert.
Der CHDIR-Befehl behandelt Leerzeichen nicht als Begrenzungszeichen, so dass es
möglich ist, in ein Unterverzeichnis zu wechseln, dessen Name Leerzeichen
enthält, ohne diese mit Anführungszeichen einzuschließen. Beispiel:
cd Eigene Dateien
ist dasselbe wie:
cd "Eigene Dateien"
Wenn die Befehlserweiterungen nicht aktiviert sind, müssen die Anführungs-
zeichen angegeben werden.
C:\>chdir /D d:\tmp
D:\tmp>
Kann es sein, dass dein Problem die fehlende /D - Option ist?
Gruss, d-oli
Hallo,
Nein dass mit der /D Option war es leider auch nicht. Das hatte ich auch erst gehofft und bereits ausprobiert ;)
Sobald ich mit System einen Gültigen verzeichnisname (z.b system("chdir /D d:\\temp") angebe bleibt die eingabe aufforderung beharlich in dem Ordner in dem sie bereits war.
Wenn ich allerdings mit absicht einen nicht existierenden Pfad angebe dann bekomme ich tatsächlich eine fehlermeldung dass dieser Pfad nicht existiert.
Die /D Option scheint hier keinen Unterschied zu machen.
Ach soooooooooo ….
Ich habe das bei mir getestet. Allerdings habe ich hier "nur" eine Linux – Kiste.
Das Problem ist folgendes:
Das CMD und dein Programm dass du startest sind eigenständige Prozesse. Der Pfad wir also nur innerhalb von deinem Programm gewechselt. Hier ginge es nun Richtung Betriebssystemgrundlagen und Systemprogrammierung, aber dazu ist es wohl noch etwas zu früh.
Das ist nicht wertend gemeint, es ist nur so, dass zuviel auf einmal ziemlich verwirrend sein kann.
Solltest du dennoch Interesse daran habe, hier ein Link:
Linux/Unix-Systemprogrammierung
Leider habe ich keinen schlauen Link für Windowssystemprogrammierung gefunden
Ansonsten bleib bei deinem Batch – Script, was, wie schon gesagt, eine gute Lösung ist, denn dass ist genau das, wofür Scriptsprachen gedacht sind.
Gruss, d-oli
PS: Wenn du das BAT - Script dorthin speicherst wo die Umgebungsvariable PATH hinzeigt , kannst du nur den entsprechenden Dateinamen (Befehl) eingeben um in dein gewünschtes Verzeichnis zu gelangen. Oder du speicherst dein Script wohin du willst und erweiterst die PATH Umgebungsvariable.
Ok Danke für die Info.
Deine Erklärung klingt logisch. Und spätestens jetzt stellt sich die Frage ob sich der Aufwand für die Spielerei die ich vorhatte tatsächlich noch lohnt. Ich würde man sagen dass kann ich mit einem klaren nein beantworten und bleibe bei meiner BAT. :P
Na ja wenigsten habe ich wieder was gelernt ;-) und den link den du mitgeschickt hast, werde ich mir demnächst mal zu Gemüte führen.
Gruß
Rüdiger