7. Arbeit mit Pfaden und Ordnern

^

7.1 Angabe von Pfaden

Für R-BASIC-Befehle, die einen Pfad erwarten (z.B. CreateDir, DeleteDir, SetCurrentPath, SetStandardPath, PushDir, PopDir und viele File~ Befehle) gelten einheitliche Konventionen, wie Pfade angegeben werden können.
Relative Pfade können ein einfacher Ordnername (z.B. "Bücher")
oder ein einfacher Pfad (z.B. "Bücher\\Informatik\\BASIC") sein. Der Pfad bezieht sich auf das aktuelle Arbeitsverzeichnis. Man beachte, dass ein Backslash in Stringkonstanten doppelt angegeben werden muss.

Pfade relativ zum Wurzelverzeichnis beginnen mit einem Rückwärts-Strich ("Backslash", '\')
z.B. "\\Bücher" oder "\\Bücher\\Informatik\\BASIC". Der Pfad bezieht sich auf das Wurzelverzeichnis des aktuellen Laufwerks.

Absolute Pfadangaben enthalten am Beginn eine Laufwerksbuchstaben.
Z.B. "F:\\Bücher" oder "F:\\Bücher\\Informatik\\BASIC". Diese beziehen sich immer auf das angegebene Laufwerk.
Einen Sonderfall stellen "reine" Laufwerksbezeichner dar,
wie z.B. "F:" oder "D:\\" (doppelten Backslash beachten)
Beide Schreibweisen kann man in SetCurrentPath verwenden und BEIDE beziehen sich auf das Wurzelverzeichnis des angegebenen Laufwerks. Im Gegensatz zu DOS unterstützt GEOS keinen "aktuellen" Pfad auf jedem Laufwerk.
Standardpfade beziehen sich auf typische GEOS-Ordner, wie z.B. WORLD oder DOCUMENT.
Sie werden über numerische Konstanten (SP_TOP, SP_DOCUMENT usw.) eingestellt. Die entsprechenden Befehle finden Sie weiter unten im Kaptiel 7.4.
Weitere Hinweise:
  • Jeder Pfad kann ein beliebiger Stringausdruck sein.

  • In Stringkonstanten muss der Backslash ('\') doppelt angegeben werden, da ein einfacher Backslash ein Sonderzeichen einleitet (z.B. Zeilenumbruch "\r") oder einen ASCII Code (z.B. "\201"):

^

7.2 Anlegen und Löschen von Ordnern und Pfaden

Ordner werden auch als "Verzeichnisse" (englisch: Directory) bezeichnet. Viele diesbezügliche Befehle enthalten deswegen ein "DIR" im Namen.

R-BASIC kann ganze Pfade, bestehend aus mehreren Verzeichnissen, auf einmal anlegen oder löschen. Die meisten Programmiersprachen können das nicht.

CreateDir

CreateDir (erzeuge Directory, lege Ordner an) legt einen Ordner oder einen kompletten Pfad auf einem Datenträger an. R-BASIC kann, im Gegensatz zu vielen anderen Programmiersprachen und dem PC/GEOS-SDK einen kompletten Pfad aus mehreren Unterverzeichnissen auf einmal anlegen.
Syntax: CreateDir path$

path$: Bezeichnung des anzulegende Pfades.
Es darf eine absolute oder eine relative Pfadangabe (siehe Kapitel 7.1) sein.

CreateDir setzt die Systemvariable fileError, z.B. wenn das spezifizierte Laufwerk nicht existiert. Trat kein Fehler auf, enthält fileError den Wert 0.

DeleteDir

DeleteDir (lösche Directory) löscht einen Ordner oder einen kompletten Pfad vom Datenträger. DeleteDir setzt voraus, das sich keine Dateien mehr im zu löschenden Ordner befinden, ansonsten kann der Ordner nicht gelöscht werden und die Variable fileError wird entsprechend gesetzt.
Syntax: DeleteDir path$ [,killAll]

path$: Bezeichnung des zu löschenden Pfades.
Es darf eine absolute oder eine relative Pfadangabe sein.

killAll: Wenn angegeben und ungleich Null (z.B. 1, YES oder TRUE):
Es soll der gesamte Pfad gelöscht werden. Ansonsten (killAll nicht angegeben oder Null) löscht DeleteDir nur den letzten Ordner eine Pfades.

DeleteDir setzt die Systemvariable fileError, z.B. wenn der zu löschende Ordner nicht existiert oder nicht leer ist. Soll ein Pfad gelöscht werden, so müssen alle zu löschenden Ordner leer sein. Trat kein Fehler auf, enthält fileError den Wert 0.

Beispiele:

CreateDir "Bücher"
CreateDir "G:\\Daten\\Programme"
s$ = "\\daten" : CreateDir s$ + "\\Programme"
DeleteDir "Bücher"

DeleteDir "G:\\Daten\\Programme"
 ' Der Ordner Programme aus dem Ordner "G:\Daten" wird gelöscht
 
DeleteDir "G:\\Daten\\Programme", YES
 ' Der komplette Pfad "G:\Daten\Programme" wird gelöscht
 
 ' Fehlerabfrage
DeleteDir "G:\\Daten\\Programme", YES
IF (fileError) THEN MsgBox "G: \\Daten\\Programme konnte nicht
                                  vollständig gelöscht werden"
Hinweis: Zur Abwärtskompatibilität mit älteren BASIC-Programmen kann man statt CreateDir auch MKDIR ("Make Directory") und statt DeleteDir auch RMDIR ("Remove Directory") schreiben.

^

7.3 Der aktuelle Ordner

Alle Dateioperationen in R-BASIC beziehen sich auf ein bestimmtes Verzeichnis, das "aktuelle Verzeichnis". Der Begriff "Pfad" (englisch "path") wird verwendet, wenn ein Weg über mehrere Verzeichnisse gemeint ist bzw. gemeint sein kann.

currentPath$, currentDir$, geosPath$

Diese Systemvariablen enthalten die Namen wichtiger Pfade bzw. Verzeichnisse.
currentPath$ enthält den aktuellen Pfad z.B. "D:\GEOS\DOCUMENT\Bilder"

currentDir$ enthält das aktuelle Verzeichnis ohne Pfad z.B. "Bilder"

geosPath$ enthält das Geos-Hauptverzeichnis z.B. "D:\GEOS"

Beispiel:

PRINT "Geos befindet sich im Ordner ";geosPath$

SetCurrentPath

SetCurrentPath (Setze aktuellen Pfad) stellt das aktuelle Verzeichnis ein.
Syntax: SetCurrentPath path$

path$: Bezeichnung des einzustellenden Pfades.
Es darf eine absolute oder eine relative Pfadangabe sein.

SetCurrentPath setzt die Systemvariable fileError, z.B. wenn das spezifizierte Laufwerk nicht existiert. Trat kein Fehler auf, enthält fileError den Wert 0.

Beispiele:

SetCurrentPath "Bücher"
SetCurrentPath "G:\\Daten\\Programme"
s$ = "\\daten" : SetCurrentPath s$ + "\\Programme"
Hinweis: Zur Abwärtskompatibilität mit älteren BASIC-Programmen kann man statt SetCurrentPath auch CHDIR ("Change Directory") schreiben.

PushDir, PopDir

GEOS verfügt über die einzigartige Fähigkeit, sich den aktuellen Pfad zu merken. Dafür wird eine sogenannter "Stack" (deutsch: Stapelspeicher), verwendet. Wie bei einem Papierstapel wird der Wert, der als letztes auf dem Stapel abgelegt wurde ("Push"-Operation) als erstes wieder vom Stapel entnommen ("Pop"-Operation). Zu jedem PushDir muss es daher ein dazugehöriges PopDir geben.
Syntax: PushDir
Das aktuelle Verzeichnis wird auf dem Stack abgelegt.

Syntax: PopDir
Das zuletzt auf dem Stack abgelegte Verzeichnis vom Stack geholt und als aktuelles Verzeichnisse wieder eingestellt.

PushDir und PopDir setzen die Variable fileError zurück (Null, kein Fehler).

Beispiel:

! Es sei "G:\Daten\Audio" das aktuelle Verzeichnis

PushDir                 ' Merken von "G:\Daten\Audio"
SetStandardPath SP_TOP  ' Einstellen von, z.B. "C:\GEOS"
----
PopDir                  ' Wiederherstellen von "G:\Daten\Audio"

^

7.4 GEOS Standardpfade

SetStandardPath

SetStandardPath stellt eines der GEOS-Standardverzeichnisse als aktuelles Verzeichnis ein. Das funktioniert unabhängig davon, auf welchem Laufwerk und in welchen Verzeichnis GEOS installiert ist und auch dann, wenn eine länderspezifische GEOS-Version vorliegt, deren Verzeichnisse anders heißen.
Syntax: SetStandardPath pfadKonstante

pfadKonstante: Eine der Standard-Pfadkonstanten. Siehe Tabelle.
Achtung! Ein ungültiger Wert für 'pfadKonstante' kann das System abstürzen lassen!

Die Variable fileError wird zurückgesetzt (Null, kein Fehler).

Beispiele:

SetStandardPath SP_DOCUMENT
SetStandardPath SP_TOP
R-BASIC kennt die folgenden Standard-Pfadkonstanten:

Tabelle

Im PC/GEOS SDK sind weitere Konstanten definiert.

ConstructPath$

ConstructPath$ erzeugt einen vollständigen Pfad aus einer Pfadkonstante und einem Unterverzeichnis. Es wird nicht geprüft, ob der so erzeugte Pfad tatsächlich existiert.
Syntax: <path$> = ConstructPath$ (pfadKonstante, tail$)

pfadKonstante: Eine der Standard-Pfadkonstanten aus der Tabelle oben.
Oder Null wenn der aktuelle Pfad anstelle eines Standardpfades verwendet werden soll.

tails$: Unterordner

<path$>: Variable vom Typ String oder besser String(200).
GEOS-Pfade können bis zu 198 Zeichen lang werden.

Die Variable fileError wird gesetzt (Null, oder Fehlerwert).

Beispiele:

path$ = ConstructPath$ (SP_DOCUMENT, "Bücher\\Karl May")
path$ = ConstructPath$ (SP_USER_DATA, "R-BASIC\\IMAGES")

SetCurrentPath "C:\\GEOS\\DOCUMENT\\Bilder"
path$ = ConstructPath$ (0, "Urlaub")
        ' --> liefert "C:\GEOS\DOCUMENT\Bilder\Urlaub"

GetStandardPath

GetStandardPath findet die zu einem Pfad gehörende Standardpfad-Konstante. Beschreibt der Pfad keinen Ordner im GEOS-System so liefert GetStandardPath den Wert Null. In diesem Fall wird die Variable fileError auf den Wert 3 (ERROR_PATH_NOT_FOUND) gesetzt.
Syntax: <numVar> = GetStandardPath ("pfadstring")

"pfadstring": Bezeichnet den gewünschten Pfad.
Es muss ein absoluter Pfad, einschließlich Laufwerksbuchstabe sein.

<numVar>: numerische Variable.

GetStandardPath findet prüft nicht, ob der Pfad wirklich existiert, sondern nur, ob er einen Standardpfad enthält. Die Variable fileError wird gesetzt (Null, oder Fehlerwert).

Beispiele. Wir nehmen an, GEOS befindet sich im Ordner "C:\GEOS". Der aktuelle Ordner sei "DOCUMENT\Bilder".

DIM stdPath

 stdPath = GetStandardPath ("C:\\GEOS\\USERDATA\\R-BASIC")
 ' -> liefert 19 (SP_USER_DATA)

 stdPath = GetStandardPath (currentPath$)
 ' -> liefert 5 (SP_DOCUMENT)

 stdPath = GetStandardPath ("D:\\SOURCE\\PCGEOS")
 ' -> liefert 0 (kein Standardpfad)

GetStandardPathTail$

GetStandardPathTail$ ist das Gegenstück zu GetStandardPath und findet den zum Standardpfad gehörenden Unterordner. Beschreibt der Pfad keine Ordner im GEOS-System gibt GetStandardPathTail$ den übergebenen Pfadstring komplett zurück. In diesem Fall wird die Variable fileError auf den Wert 3 (ERROR_PATH_NOT_FOUND) gesetzt.
Syntax: <path$> = GetStandardPathTail$ ("pfadstring")
"pfadstring": Bezeichnet den gewünschten Pfad.
Es muss ein absoluter Pfad, einschließlich Laufwerksbuchstabe sein.

<path$>: Variable vom Typ String oder String(200).
GEOS-Pfade können bis zu 198 Zeichen lang werden.

GetStandardPathTail$ findet prüft nicht, ob der Pfad wirklich existiert, sondern nur, ob er einen Standardpfad enthält. Die Variable fileError wird gesetzt (Null, oder Fehlerwert).

Beispiele. Wir nehmen an, GEOS befindet sich im Ordner "C:\GEOS". Der aktuelle Ordner sei "DOCUMENT\Bilder".

DIM path$ as String(200)

 path$ = GetStandardPathTail$ ("C:\\GEOS\\USERDATA\\R-BASIC")
 ' -> liefert "R-BASIC"

 path$ = GetStandardPathTail$ (currentPath$)
 ' -> liefert "Bilder"

 path$ = GetStandardPathTail$ ("D:\\SOURCE\\PCGEOS")
 ' -> liefert "D:\\SOURCE\\PCGEOS" (kein Standardpfad)

^

Weiter...