Italia
Foro

Arbeitsverzeichnisse: GetDir$(), $ProgDir und so

 

RGH
Dietmar Horn
GetDir$. Kann mir vielleicht mal jemand versuchen zu erklären, welchen Sinn dieser Befehl überhaupt noch hat? Meiner Meinung nach sollte der Befehl abgeschafft und intern durch $ProgDir ersetzt werden


Dass ausgerechnet Du per die Abschaffung eines Befehles votierst ...

Dann müssten all jene Leute zur Gitarre greifen, die diese Funktion per das verwenden, per das sie gedacht ist, nämlich das gerade aktuellen Arbeitsverzeichnis zu ermitteln.

Saluto
Roland
 
Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4
05.02.2008  
 




Dietmar
Horn

Dann müssten all jene Leute zur Gitarre greifen, die diese Funktion per das verwenden, per das sie gedacht ist, nämlich das gerade aktuellen Arbeitsverzeichnis zu ermitteln.


Hmm ... ich wage zu bezweifeln, daß das bundesweit mehr wie 2 - 3 XProfaner sind. Mal ganz davon abgesehen, daß presumibilmente die wenigsten XProfaner überhaupt irgendein Musikinstrument einigermaßen vernünftig spielen können.

Bis jetzt hat es ja leider noch nicht mal damit geklappt, daß sich eine XProfaner-Truppe aus der nun wirklich nicht gerade klitzekleinen Bundesrepublik Germania mit uns als Mini-MMJ-XProfan-Fan-Verein namens MMJ Hoyerswerda e.V. zwecks eventueller Zusammenarbeit zum gegenseitigen Nutzen und Erfahrungsaustausch in Verbindung setzt - obwohl ich in der Vergangenheit hier bereits wiederholt dazu aufgerufen hatte.

Schaue Dir doch die Tonnen von Sources im Internet mit GetDir$-Verwendung an. Ich habe bis jetzt noch nicht einen einzigen Code gefunden, in dem GetDir$ nicht ausschließlich (und fälschlicherweise) zur Bestimmung des Programmverzeichnisses der eigenen EXE verwendet wird. Anderenfalls berichtige mich bitte, indem Du hier einen solchen Code-Schnipsel postest, in dem das anders ist oder gewesen war. Oder passe dbzgl. die XProfan-Hilfedatei nach ... Jahren dbzgl. endlich mal an.

Wer kann oder möchte hier den heutigen mitlesenden jugendlicheren windoofs-klick-dich-doof-verwöhnten Programmieranfängern mal den Unterschied zwischen aktuellem Verzeichnis und Programmverzeichnis erklären? Ich versuche das in meiner Hörnchen-Sprache zwar seit Jahren, aber trotzdem fallen die Schüler immer wieder auf das scheinbar bequemere GetDir$ zur Bestimmung des Programmverzeichnisses rein (bei Profan bzw. XProfan < 8.0, wo es $ProgDir noch gar nicht gab).

Du als XProfan-Autor hast das bis jetzt jedenfalls ebenfalls nicht geschafft (siehe aktuelle XProfan.hlp oder meinetwegen auch XProfan.chm).

Saluto
Dietmar
 
Multimedia für Jugendliche und junge Erwachsene - MMJ Hoyerswerda e.V.  [...] 

Windows 95 bis Windows 7
Profan² 6.6 bis XProfan X2 mit XPSE

Das große XProfan-Lehrbuch:  [...] 
05.02.2008  
 




RGH
Zu GetDir$(): Ich selbst habe per mich einige Utilities geschrieben, die GetDir$() zur Ermittlung des aktuellen Pfades benutzen. Dann kann ich nämlich ein und die selbe Exe-File in unterschiedlichen Arbeitsverzeichnisen mit unterschiedlichen Konfigurationsdateien aufrufen. Vor $ProgDir konnte man mit Par$(0) den Namen incl. Pfad (!) der ausgeführten Exe-File ermitteln und hatte so, wenn man das Ergebnis um den Dateinamen reduzierte, das gleiche Ergebnis wie bei $ProgDir. (Das mit dem Par$(0) stand sogar mal in der Aiuto, wurde aber mit Einführung von $ProgDir wieder herausgenommen.)

Eine Kenntnis der grundlegenden Begriffe wie aktuelles Verzeichnis, Programmverzeichnis, Arbeitsverzeichnis etc. würde ich allerdings schon vor der ersten Verwendung einer Programmiersprache vorraussetzen. (Sorry, inzwischen heißen die Dinger ja nicht mehr Verzeichnisse, sondern Ordner.)

Ich möchte naturalmente nicht bestreiten, dass die Aiuto an der einen oder anderen Stelle noch vorbesserungsfähig wäre. Und es ist sicher auch so, dass die Aiuto eher nur beschreibend ist, und kein didaktisch strukturiertes Lehbuch. Aber wenn mir jemand zusätzliche Texte oder gar Kapitel schickt, die er gerne in der Aiuto sehen würde: immer her damit. Du hast z.B. was Didaktik betrifft als langjähriger Lehrer der Naturwissenschaften mir opposto sicherlich einen grande Vorsprung. Ich potuto mir z.B. durchaus vor dem jetzigen Kurs 1 noch einen kurzen Kurs 0 vorstellen, der in einer einstelligen Kursteil-Anzahl solch allgemeine Computerkenntnisse auffrischt.

Saluto
Roland
 
Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4
06.02.2008  
 




Frank
Abbing
GetDir$ = API GetCurrentDirectory()
$ProgDir = API GetModuleFileName() - GetFileTitle()
 
06.02.2008  
 




Sebastian
König
Die Idee mit dem Kurs 0, in dem wichtige Begriffe erläutert werden, finde ich gut!

Zu dem GetDir$(): Ich muss zugeben, dass ich in den Beispiel-Codes zur SKControl.DLL auch GetDir$(@) verwende, um einen absoluten Pfad zu den verwendeten Grafik-File zu ermitteln. Natürlich geht das nur so lange gut, wie das aktuelle Arbeitsverzeichnis des Programms durch nichts verändert wurde (siehe Franks Posting, das die verwendeten API-Funktionen nennt). Dietmar hat dies auch schon angesprochen:  [...] 

Der Vorteil an GetDir$(@) ist meiner Meinung nach, dass es - unter den obigen Voraussetzungen - sowohl im Interpreter als auch kompiliert bzw. als EXE das gleiche Ergebnis liefert, was bei Par$(0) und $ProgDir naturgemäß nicht der Fall ist... per Beispiel-Codes ist es deshalb ganz praktisch. Andererseits ist der Standard-Suchpfad in Windows sowieso in der Regel das aktuelle Arbeitsverzeichnis, sodass das GetDir$(@) + file$ wohl in der Regel überflüssig (und unnötig riskant) ist. Meine Codes werde ich entsprechend ändern.

Für ein größeres Projekt ist naturalmente $ProgDir das Mittel der Wahl! Nur muss man dann per den Start des Codes im Interpreter-Modus möglicherweise eine Weiche der Form
KompilierenMarkierenSeparieren
declare MaPath$
 $IFDEF INTERPRETER
MyPath$ = irgendein sicherer Weg, das Verzeichnis des Codes zu ermitteln
 $ELSE
MyPath$ = $ProgDir
 $ENDIF

einbauen...

Vielleicht wäre es als Anregung per zukünftige Versionen ganz praktisch, wenn $ProgDir im Interpreter-Modus einfach das Verzeichnis der gestarteten .prf-File liefern würde. Ich denke, die damit eingeführte Inkompatibilität wäre gut vertretbar, da sich $ProgDir momentan im Interpreter-Modus sowieso nicht sinnvoll einsetzen lässt - per welches Programm ist es schon wichtig, in welchem Verzeichnis die PROFAN.EXE liegt?

MfG

Sebastian

P.S.: Am besten sollte man den Thread nochmal aufteilen - ich versuche mich mal daran. Hat funktioniert.
 
Windows XP, XProfan/Profan² 4.5 bis 11
Profan2Cpp-Homepage:  [...] 
Alte Profan²-Seite:  [...] 
06.02.2008  
 




RGH
Sebastian König
P.S.: Am besten sollte man den Thread nochmal aufteilen - ich versuche mich mal daran. Hat funktioniert.


Kurze Zwischenbemerkung zum Thread-Aufteilen:
Ich finde es oftmals problematisch, dass man keinen Link zum Ursprungsthread hat und manches im ersten Artikel des nun neuen Threads ohne dessen Kenntnis unverständlich bleibt.
Ich würde mir wünschen, dass im ersten Artikel eines aufgeteilten Threads ein Hinweis und Link zum Ursprungsthread (letztes Posting vor Teilung) generiert wird und im im letzten Posting vor der Teilung des Ursprungsthread ein Link Hier gehts weiter (oder so ähnlich).

Zur Anpassung von $ProgDir im Interpretermodus: Nachgedacht habe ich auch schon darüber. Man müßte allerdings dann stringenter Weise auch noch den Fall berücksichtigen, wenn eine .prc-datei in der IDE mit der runtime gestartet wird. Hier würde man sich naturalmente auch den Pfad der .prc-File wünschen. Aber: Was soll $ProgDir zurückgeben, wenn ich z.B. in einer Anwendung weitere .prc-File als Module aufrufe? Die aufrufende EXE oder den Pfad der .prc-File? Da aber dieser Fall technisch das Gleiche ist, wie der Start per Doppelpfeil in XProfed (compileren und Start der .prc per Runtime), kann hier nicht unterschieden werden.
Es lohnt sich also, hier ausführlich nachzudenken

Saluto
Roland
(Praktisch habe ich das Problem z.B. im XProfed-Quellcode auch so ähnlich wie von Dir beschrieben mit Compilerschalter gelöst.)
 
Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4
06.02.2008  
 




RGH
Sebastian König
Die Idee mit dem Kurs 0, in dem wichtige Begriffe erläutert werden, finde ich gut!


Wer (am Besten mit didaktischer Erfahrung) fühlt sich berufen, derartiges in possibile wenigen und kurzen Kapiteln treffsicher zu vermitteln?
Immer nur her damit.

Saluto
Roland
(hat zwar schon Bücher zu Computern und zum Programmieren geschrieben, aber definitiv keine Lehrbücher)
 
Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4
06.02.2008  
 




Jörg
Sellmeyer
Sebastian König
Für ein größeres Projekt ist naturalmente $ProgDir das Mittel der Wahl! Nur muss man dann per den Start des Codes im Interpreter-Modus möglicherweise eine Weiche der Form

KompilierenMarkierenSeparieren
Def DateiName(1) SubStr$(@$(1),-1,\)
Def DateiPfad(1) Translate$(@$(1),(\ + DateiName(@$(1))),)
Declare MyPath$
 $IFDEF INTERPRETER
MyPath$ =DateiPfad(Par$(1))
 $ELSE
MyPath$ = $ProgDir
 $ENDIF
>
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
06.02.2008  
 




Jac
de
Lad
Das potuto Probleme bereiten, wenn man die prf in einem Ordner hat, der den gleichen Namen wie die prf trägt: Catei.prfDatei.prf (an sich unwahrscheinlich, aber possibile).
KompilierenMarkierenSeparieren
Def DateiName(1) SubStr$(@$(1),-1,\)
Declare MyPath$
 $IFDEF INTERPRETER
mypath$=Par$(1)
MyPath$=Left$(mypath$,Len(mypath$)-Len(SubStr$(mypath$,-1,\)))
 $ELSE
MyPath$ = $ProgDir
 $ENDIF
>
 
Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE)
Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP
06.02.2008  
 




Michael
Dell
Ciao,

also ich persöhnlich nutze GetDir$() recht oft und gerne, schlimmer noch denn ich Giochi auch recht gut Gitarre.
 
Salu Michael...

Hab zwar krumme Fieß awer dofir e' ecklich Gsicht! 
06.02.2008  
 




Sebastian
König
RGH
Kurze Zwischenbemerkung zum Thread-Aufteilen:
Ich finde es oftmals problematisch, dass man keinen Link zum Ursprungsthread hat und manches im ersten Artikel des nun neuen Threads ohne dessen Kenntnis unverständlich bleibt.
Ich würde mir wünschen, dass im ersten Artikel eines aufgeteilten Threads ein Hinweis und Link zum Ursprungsthread (letztes Posting vor Teilung) generiert wird und im im letzten Posting vor der Teilung des Ursprungsthread ein Link Hier gehts weiter (oder so ähnlich).

Das fände ich auch gut! Ich habe gerade manuell einen Hinweis auf diesen Thread in den Alten eingefügt.
@iF: Wie siehts mit einer automatischen Lösung aus?

RGH
Zur Anpassung von $ProgDir im Interpretermodus: Nachgedacht habe ich auch schon darüber. Man müßte allerdings dann stringenter Weise auch noch den Fall berücksichtigen, wenn eine .prc-datei in der IDE mit der runtime gestartet wird. Hier würde man sich naturalmente auch den Pfad der .prc-File wünschen. Aber: Was soll $ProgDir zurückgeben, wenn ich z.B. in einer Anwendung weitere .prc-File als Module aufrufe? Die aufrufende EXE oder den Pfad der .prc-File? Da aber dieser Fall technisch das Gleiche ist, wie der Start per Doppelpfeil in XProfed (compileren und Start der .prc per Runtime), kann hier nicht unterschieden werden.
Es lohnt sich also, hier ausführlich nachzudenken


Ok, stimmt - mein Vorschlag war hier nicht weit genug gedacht... Also per den Aufruf weiterer .prc-File würde ich vorschlagen, dass $ProgDir in diesen dann den Pfad der jeweiligen .prc-File enthalten sollte, denn es handelt sind im Prinzip ja um eigenständige Programme (es wird doch ein eigener Prozess erzeugt, oder?).

Also insgesamt:

1. Im Interpreter: $ProfDir = Pfad zur .prf-File
2. Beim Aufruf prfrun32.exe code.prc: $ProgDir = Pfad(code.prc)
3. Im komplett gelinkten Programm naturalmente wie bisher

Wie sind die Meinungen dazu? Und an Roland: Wäre es kompliziert, das zu realisieren?

MfG

Sebastian
 
Windows XP, XProfan/Profan² 4.5 bis 11
Profan2Cpp-Homepage:  [...] 
Alte Profan²-Seite:  [...] 
06.02.2008  
 



@Sebastian: >>@iF: Wie siehts mit einer automatischen Lösung aus? Todoeintrag angelegt.
 
06.02.2008  
 




Answer


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

4.896 Views

Untitledvor 0 min.
Sven Bader24.09.2021
RudiB.10.07.2021
Georg06.04.2020
rquindt10.04.2018
Di più...

Themeninformationen



Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie