GetCurrentdirectory

In dieser Linux-Ecke dürfen nur Themen rund um Linux geschrieben werden.
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
langinagel
Beiträge: 30
Registriert: 03.08.2005 21:06
Computerausstattung: AMD-Krücke 8GB / Lubuntu 18.04
core i3 / 4GB / 1TB / Ubuntu 16.04
und noch paar alte Schinken
Wohnort: Germ-any
Kontaktdaten:

GetCurrentdirectory

Beitrag von langinagel »

Moin,

Was gibt eigentlich GetCurrentdirectory tatsächlich aus?

Folgender Code:

Code: Alles auswählen

Verz.s = GetCurrentDirectory()+"output.xml"
              CreateXML(0)
              RootNode = RootXMLNode(0)
              .....(ordentlicher XML-Code)....
              SaveXML(0, Verz)
         
Wenn ich diesen Code im Debug-Modus vom Editor aus starte, setz er mir die xml-Datei in das gewünschte Verzeichnis.
Kompiliere ich aber ein Extra-Executable mit dem gleichen Code, so schreibt das Executable mir die xml-Datei in das HOME-Verzeichnis.

zur Übersicht:
PB 4.30, OpenSuse11.0
/ = Home
/dingsbums/ = wo das Executable rein soll und wo die output.xml auch hin soll
/dingsbums/code = wo mein Code steht

Kompileroption "aktuelles Verzeichnis" ist im ersten Fall auf "../" gestellt und es funktioniert.
Im zweiten Fall oder in jedem anderen FAll, wenn das Executable im Verz. /dingsbums steht, wird ins HOME-Verzeichnis geschrieben.

Que fait?

Gruß aus München
LN
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

Es gibt das aktuelle Arbeitsverzeichnis aus, wie unter Windows auch.

Ein Beispiel kann man gut nachvollziehen:

Die Anwendung hat den Dateinamen "/home/einuser/bin/test".
Jetzt geht man in die Konsole/das Terminal und schreibt
cd /home/einuser/bin/
./test
Das Arbeitsverzeichnis ist dann "/home/einuser/bin/"
Schreibt man aber
cd /home/einuser/
./bin/test
So ist das Arbeitsverzeichnis dann "/home/einuser/".

Es beschreibt also wo das Programm ausgeführt wurde.

Desweiteren sind alle weiteren Programme, die durch "test" ausgeführt werden im selben Arbeitsverzeichnis wie "test" zu dem Zeitpunkt als es das weitere Programm ausgeführt hat. Die Programme können ihr Arbeitsverzeichnis natürlich ändern.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
langinagel
Beiträge: 30
Registriert: 03.08.2005 21:06
Computerausstattung: AMD-Krücke 8GB / Lubuntu 18.04
core i3 / 4GB / 1TB / Ubuntu 16.04
und noch paar alte Schinken
Wohnort: Germ-any
Kontaktdaten:

Danke

Beitrag von langinagel »

Sorry, daß ich erst jetzt antworte.

DD, Dein Hinweis hat geholfen, allerdings erst über Bande. Das wichtigste Stichwort war Konsole, denn aus der Konsole gestartet im richtigen Verzeichnis funktioniert das PRG wie erhofft.

Fazit und Lernerfolg für mich:
wenn PRG über die Ikons im Explorer unter Opensuse aufgerufen werden (wie ich es zunächst machte), werden sie unter dem Verzeichnis /home/username gestartet.

Muß man halt auch wissen.

Vielen Dank also und wieder schönen Gruß

LN
Little John

Beitrag von Little John »

> Was gibt eigentlich GetCurrentdirectory tatsächlich aus?

Gute Frage.

> Das wichtigste Stichwort war Konsole

Ja. Das ganze Konzept eines "aktuellen Verzeichnisses" entstand soweit ich weiß im Rahmen des Arbeitens mit der Konsole, und gibt auch v.a. in diesem Zusammenhang einen Sinn. Das aktuelle Verzeichnis ist eben das, welches jeweils im Prompt angezeigt wird, wie z.B.
C:\Programme>
Aber wenn ich z.B. unter Windows Start > Ausführen wähle, und dann ein Programm eingebe und starte, was ist dann das aktuelle Verzeichnis? Das ist meines Wissens nicht definiert.
Im Zusammenhang mit dem "aktuellen Verzeichnis" habe ich hier (wie auch in anderen Programmierforen) im Wesentlichen bemerkt, dass es Probleme verursacht, anstatt welche zu lösen. Zumindest unter Windows kann man getrost komplett auf diese in GUI-Umgebungen eher verwirrende Funktion verzichten -- wie's unter Linux ist weiß ich nicht.

Gruß, Little John
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Re: Danke

Beitrag von DarkDragon »

langinagel hat geschrieben:Sorry, daß ich erst jetzt antworte.

DD, Dein Hinweis hat geholfen, allerdings erst über Bande. Das wichtigste Stichwort war Konsole, denn aus der Konsole gestartet im richtigen Verzeichnis funktioniert das PRG wie erhofft.

Fazit und Lernerfolg für mich:
wenn PRG über die Ikons im Explorer unter Opensuse aufgerufen werden (wie ich es zunächst machte), werden sie unter dem Verzeichnis /home/username gestartet.

Muß man halt auch wissen.

Vielen Dank also und wieder schönen Gruß

LN
Es kommt immer darauf an, in welchem Verzeichnis der "übergeordnete" Prozess bei der Erstellung deines Prozesses ist.

Starte mal konqueror oder dolphin mit der Konsole in einem anderen Verzeichnis und starte von dort aus dann dein Programm. Wenn Konqueror und Dolphin ihre Arbeitsverzeichnisse nicht anderwertig festlegen (SetCurrentDirectory gibt es z.B. in PureBasic) bevor dein Prozess gestartet wird, dann wirst du merken, dass es dort ist.

Um sicher zu gehen, dass dein Arbeitsverzeichnis immer das Verzeichnis ist in dem dein Programm liegt, kannst du das hier zu Beginn deines Programms verwenden:

Code: Alles auswählen

SetCurrentDirectory(GetPathPart(ProgramFilename()))
Was du allerdings dann beachten musst ist, dass jedes Programm welches du nun ausführst auch in dem Verzeichnis ausgeführt wird.

@Little John:
Bei Start -> Ausführen schätze ich wird entweder das Programmverzeichnis oder der Desktop des Users genommen. Aber ich glaube das ist nicht Dokumentiert und somit kann es auch Zufall sein wo etwas ausgeführt wird.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Damit CurrentDirectory irgendwo sinnvoll hinzeigt, muß es gesetzt werden.
Wie es in der Konsole geht, wurde ja gesaget, ansonsten macht es der
Dateimanager. Bei RunProgram ist der dritte Parameter dafür zuständig.

Ansonsten wird es von Vernüpfungen (ausführen in...) bzw. vom Menüsystem
unter Linux geregelt.

Das ganze ist aber im Grunde vollkommen unwichtig, man ermittelt das
Verzeichnis zu seinem Programm grundsätzlich selber und verläßt sich
niemals drauf, es wurde gesetzt!
(allerdings hätte ich mir diese wiederholte Aussage auch sparen können,
seit Jahren sind viele zu Faul oder Dumm das umzusetzen, weil der Fehler
aufgrund ihrer Arbeitsweise nicht auftaucht).
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten