Verschlungene Pfade und dunkle Wege

Jedes Programm benutzt Funktionen, die sich mit Pfaden, Dateien, Laufwerken und der Dateiauswahlbox beschäftigten. Diese Funktionen und ein paar allgemeine Dinge zum Thema Dateien und Pfade sollen im Rahmen dieses Beitrags erörtert werden.

Was ist überhaupt ein Pfad? Genügt es nicht, wenn eine Datei einfach einen bestimmten Namen hat? Nun, in älteren Betriebssystemen genügte tatsächlich ein einfacher Name. Es gab noch kein hierachisch aufgebautes Dateisystem, weil in den meisten Fällen gar keine Notwendigkeit vorhanden war. Die Zahl der Dateien, die auf einem Medium gemeinsam Platz fanden, war einfach zu gering. Selbst bei einer gut gefüllten Diskette war immer noch der Überblick gewahrt. Mit wachsender Kapazität von Disketten und auch Festplatten war jedoch ein neues Dateisystem unumgänglich. Die entscheidende Neuerung war, daß nicht mehr nur ein Verzeichnis für alle Dateien auf einem Medium zuständig war, sondern mehrere. Man schuf ein hierarchisches Verzeichnissystem: Das Hauptverzeichnis oder auch Wurzel- Verzeichnis (engl. Rootdirectory) konnte nun neben den ‘normalen’ Dateien auch selbst wieder Verzeichnisse, sogenannte Unterverzeichnisse, enthalten. Diese Verzeichnisse enthalten ihrerseits Dateien und möglicherweise weitere Unterverzeichnisse.

Man kann sich das vorstellen wie einen Aktenschrank, der viele, verschieden beschriftete Schubladen hat. In jeder Schublade befinden sich eine Reihe von Sammelordnern, die wiederum einzelne Akten enthalten. Auf diese Weise kann man die Ordnung erhöhen und leichter die Übersicht behalten. Allerdings sind zum Auffinden einer bestimmten Akte auch mehr Informationen notwendig. Der Name allein genügt oft nicht mehr, wenn man nicht endlos herumsuchen will. „Nimm aus der Schublade ‘Software’ die Mappe ‘OMIKRON’ und bring mir den Beleg ’03-1801’ so z.B. könnte eine ‘Zugriffsanweisung’ aussehen, um schnell an eine bestimmte Sache zu gelangen. Diese ‘Wegbeschreibung’, die genau vorgibt, wie man an die gesuchte Sache gelangt, ist die genaue Analogie eines Pfades in unserem Dateisystem. Man kann sich ein hierarchisches Verzeichnissystem auch wie einen Baum vorstellen. Unten befindet sich das Wurzelverzeichnis und darüber als erste Verzweigungen die in ihm enthaltenen Unterverzeichnisse. Enthalten diese weitere Verzeichnisse, so werden sie wieder eine Etage höher angeordnet usw. Ein Pfad beschreibt nun genau den Weg, den man, ausgehend von der Wurzel, gehen muß, um ein bestimmtes Ziel zu erreichen. Man notiert den Pfad auf eine ganz bestimmte Weise: Zuerst kommt der Laufwerksbuchstabe (‘A’-’P’), gefolgt von einem Doppelpunkt. Danach werden nun die Namen der einzelnen Verzeichnisse aufgezählt, die von unten nach oben im Verzeichnisbaum durchlaufen werden. Zum Schluß wird der eigentliche Dateiname angefügt. Die einzelnen Verzeichnisnamen und auch der Dateiname werden untereinander mit einem Rückwärtsschrägstrich (engl. Backslash) ‘V abgetrennt. Der vollständige Pfad müßte für das obige Beispiel lauten: „A:\SOFTWARE\OMIKRON\03-1801". Das Laufwerk wurde willkürlich zu ‘A’ gewählt. Damit nun ein solches Dateisystem möglichst effizient genutzt werden kann, sollten alle Programme es auch benutzen und berücksichtigen. Das beste Dateisystem nützt nämlich nichts, wenn das Accessory XY seine Konfigurationsdatei immer auf Laufwerk C im Wurzelverzeichnis erwartet. Andererseits ist es natürlich auch recht umständlich, immer den gesamten Zugriffspfad angeben zu müssen, bevor irgendein Programm an bestimmte Daten gelangt. Hier sind deshalb einige hilfreiche Funktionen im Betriebssystem vorgesehen, die den Umgang mit Pfaden sehr erleichtern. Zunächst ist hier der Standardpfad zu nennen. Das Betriebssystem verwaltet für jedes Laufwerk einen Standardpfad, der es erlaubt, die Pfadangabe entsprechend zu verkürzen. Zusammen mit dem Standardlaufwerk ist sogar wieder der Dateiname alleine ausreichend. Wenn also nichts anderes angegeben ist als nur der Dateiname, so sieht das Betriebssystem automatisch auf dem Standardlaufwerk unter dem Standardpfad nach, ob die gewünschte Datei dort existiert. Zwischen den beiden Extremen vollständiger Pfadname und alleiniger Dateiname sind beliebige Abkürzungen möglich. Man kann z.B. die Laufwerksbezeichnung weglassen: „\SOFTWARE\OMIKRON\03-1801“. In diesem Fall wird automatisch das Standardlaufwerk ergänzt. Genauso ist es denkbar, den Pfad wegzulassen, also etwa „C:03-1801 “. Jetzt wird der Standardpfad von Laufwerk C automatisch eingefügt. Diese Schreibweise ist sorgfältig zu unterscheiden von „C:\03-1801“. Hier wird nämlich durch den Backslash zum Ausdruck gebracht, daß es sich um das Wurzelverzeichnis von Laufwerk C handelt. Der Pfad fehlt hier also nicht etwa, sondern er besteht nur aus dem einen Zeichen ‘V. Eine weitere Möglichkeit ist die Angabe eines relativen Pfades. Nehmen wir an, der Standardpfad von Laufwerk C sei „\SOFTWARE\“, dann könnte man obigen Pfad auch „C:OMIKRON\03-1801“ schreiben. Wie Sie sehen, fehlt wieder der Backslash zu Beginn der Pfadangabe. Dies veranlaßt das Betriebssystem wiederum, den Standardpfad nach dem Doppelpunkt einzufügen, um so einen vollständigen Pfad zu erzeugen. Die Bezeichnung ‘relativ’ rührt daher, daß die Pfadangabe sich hier auf den Standardpfad bezieht und ohne ihn unvollständig ist. Bei relativen Pfadangaben ist noch eine spezielle weitere Schreibweise vorgesehen, die sonst nicht verwendet wird: Ein Verzeichnis mit Namen meint jeweils das übergeordnete Verzeichnis. Die Pfadangabe C:..\TES~DPROBE.DAT geht vom Standardverzeichnis des Laufwerks C aus ein Verzeichnis zurück (in das sogenannte Vaterverzeichnis) und dort dann in das Verzeichnis „TEST“. Diese letzte Art der Pfadangabe ist aber selten sinnvoll einsetzbar. Wichtig zu merken sind vor allem vier Fälle:

  1. nur der Dateiname: Einfügen von Standardpfad und Standardlaufwerk

  2. Laufwerk und Dateiname: Einfügen des Standardpfades des Laufwerks

  3. relativer Pfad und Dateiname: Einfügen des Standardpfades zwischen Laufwerk und relativem Pfad

  4. vollständiger Pfad und Dateiname: dem ist nichts hinzuzufügen.

Wie nun diese Pfade vom BASIC aus in den Griff zu bekommen sind, ist in Listing 1 zu erkennen.


'(c)1932 by MAXON-Computer
'
DEF FN Get_Path$' liefert Standardpfadnamen vom Standardlaufwerk 
    LOCAL Path$, Drive%L, Adr%L 
    GEMDOS (Drive%L, $19)
    Path$= CHR§(0)*66
    Adr%L= LPEEK ( VARPTR(Path$)) + LPEEK ( SEGPTR + 28)' Stringadresse
    GEMDOS (, $47, L Adr%L,Drive%L+1)
    Path$= CHR$ (Drive%L+65) + ":"+ LEFT$(Path$, INSTR(Path$,CHR$(0))-1)+"\"
RETURN Path$
'
DEF FN Get_Path$(Drive$) ' liefert den Standardpfadnamen von Laufwerk 
    LOCAL Path$,Drive%L,Adr%L
    Drive%L= ASC( UPPER$(Drive$)) - ASC("A")'Nummer des Laufwerks 
    Path$= CHR$(0)*66
    Adr%L= LPEEK ( VARPTR (Path$) ) + LPEEK ( SEGPTR + 28)'Stringadresse
    GEMDOS (, $47, L Adr%L,Drive%L+1)
    Path$= CHR$(Drive%L+65)+" : "+ LEFTS(Path$, INSTR(Path$,CHR$(0))-1)+"\"
RETURN Path$
'
DEF PROC Set_Path(Path$)' setzt den Standardpfad des LW
    LOCAL Adr%L, Drive%L, Drive2%L
    GEMDOS Drive%L,$19' altes Standard LW merken 
    Drive2%L= ASC( UPPER$(Path$))- ASC("A")'Nummer des Laufwerks 
    GEMDOS ,$E, Drive2%L
    Path$=Path$+ CHR$(0)' Nullzeichen als Endekennung anhängen
    Adr%L= LPEEK( VARPTR(Path$))+ LPEEK( SEGPTR+ 28)'Stringadresse 
    GEMDOS , $3B, L Adr%L 
    GEMDOS , $E,Drive%L 
RETURN
'
DEF PROC Set_Drive(Drive$)' setzt das StandardLW 
    LOCAL Drive%L
    Drive%L= ASC ( UPPER$(Drive$) ) - ASC("A")'Nummer des Laufwerks 
    GEMDOS (, $E, Drive%L)
RETURN
'
DEF PROC Set_Drive_And_Path(Path$)
    CHDIR Path$
RETURN

Listing 1.

Wenn man sich nun aber mit allen Aktionen nicht auf ein bestimmtes Laufwerk oder einen bestimmten Pfad beschränken will, so steht mit der sogenannten Dateiauswahlbox eine weitere, äußerst nützliche Betriebssystemfunktion zur Verfügung. Sie erlaubt es, den Pfad und das Laufwerk beliebig zu wechseln und den Dateinamen einfach aus einer Liste zu übernehmen. Die Verwendung dieser Funktion garantiert also volle Unterstützung des hierarchischen Dateisystems. Sie sollte deshalb bei jeder Dateifunktion, die eine Benutzerauswahl erfordert, aufgerufen werden. Wie diese Funktion in OMIKRON.Basic aussieht und was zu beachten ist, zeigt das Listing 2 (diese Funktionen sind übrigens alle bereits komplett in der EasyGEM-Library enthalten):

Wie aus dem Listing zu ersehen ist, ruft man die Dateiauswahlbox sinnvollerweise mit dem Standardpfad des Standardlaufwerks auf. Dieser Pfad ist nämlich immer genau auf den Pfad eingestellt, von dem das Programm gestartet wurde. Wichtig ist noch die sogenannte „Jokerauswahl“. Es ist sinnvoll, die in der Dateiauswahlbox dargestellte Liste von Dateinamen möglichst kurz zu halten und bestimmte „Dateitypen“ von vorneherein auszuklammern. Zu diesem Zweck trifft man eine Auswahl mit Hilfe von sogenannten ‘Jokerzeichen’. Das erste Jokerzeichen steht stellvertretend für beliebig viele Zeichen, das zweite “?’ steht für genau ein Zeichen. Die beiden Teile des Dateinamens - Name und Erweiterung - werden dabei getrennt behandelt. So paßt die Auswahl „*.BAS“ auf alle Dateien mit der Erweiterung „BAS“.

paßt auf alle Dateien, die aus Dateinamen und Erweiterung bestehen. „.AC?“ paßt auf alle Dateien, deren Erweiterung mit „AC“ beginnt, also etwa„ACC“ oder„ACX“.„A.BAK“ paßt auf alle Dateien, deren Namen mit „A“ beginnt und die die Erweiterung „BAK“ haben. Wenn man also der Dateiauswahlbox zusätzlich noch eine sinnvolle Erweiterung übergibt, bleibt die Zahl der wählbaren Dateien übersichtlich. Eventuell sollte man nach der Benutzerauswahl prüfen, ob der Benutzer den Pfad oder das Laufwerk geändert hat und den Standardpfad und das Standardlaufwerk entsprechend setzen. So kann vermieden werden, daß bei einer neuerlichen Auswahl der Pfad wieder umgestellt werden muß. Er bleibt dann immer auf dem zuletzt benutzen Pfad stehen. Es bleibt zu hoffen, daß - ausgestattet mit diesen Funktionen -möglichst immer eine vernünftige Pfadbehandlung vorgesehen wird. So sind selbst kleinere Programme, was Dateiauswahl angeht, einfach und einheitlich bedienbar.

'(C)1992 by MAXON-Computer
'
DEF FN Get_Name$(Path$,Name$)   ' entfernt Jokerzeichen am
'Pfadende und hängt den Dateinamen an 
    LOCAL A$=Path$
    A$= LEFTS(A$, LEN(A$)-INSTR(MIRROR$(A$), "\")+1) 
    A$=A$+Name$
RETURN A$
'
DEF FN Exist%L(A$)              ' stellt fest, ob eine Datei existiert
    LOCAL Exist%L=0'
    OPEN "F",16,A$,63 
    IF NOT EOF(16) THEN Exist%L=-1 
    CLOSE 16 
RETURN Exist%L
'
DEF PROC Fsel(Ext$,R Name$,R Ok%L)
    'Ext$ = Index der gewünschten Auswahl (z.B. *.* oder *.TXT)
    'Name$: IN: Namensvorgabe OUT: entgultiger Name mit Pfad
    'Ok: OK oder Abbruch
    '
    LOCAL Path$=FN Get_Path$+Ext$
    MOUSEON
    FSEL_INPUT (Path$,Name$,Ok%L)
    MOUSEOFF
    Name$=FN Get_Name$(Path$,Name$)
    '
RETURN

Listing 2.


Stefan Rinke
Aus: ST-Computer 05 / 1992, Seite 89

Links

Copyright-Bestimmungen: siehe Über diese Seite