Referenz - DIR
Syntax: DIR[$] ( [Dateiangabe] [, Attributnummer [, Rückgabeattribut]] )
Typ: Funktion
Kategorie: System
DIR gibt die Dateien im aktuellen Arbeitsverzeichnis oder im angegebenen Pfad zurück.
- 'Dateiangabe' ist ein String, der das Muster (Pattern) zu den aufzulistenden Dateien oder Verzeichnissen enthält.
- 'Attributnummer' ist eine Zahl, die angibt, welche Attribute die zurückzugebenden Dateien haben sollen. Die Atrributnummern werden weiter unten erläutert.
- 'Rückgabeattribut' ist ein INTEGER oder ein INTEGER PTR. Wird hier ein Wert angegeben, schreibt FreeBASIC an die Speicherstelle, auf die 'Rückgabeattribut' verweist, welche Attribute auf die gefundene Datei tatsächlich zutreffen.
- Der Rückgabewert ist der Name der ersten Datei (bzw. Verzeichnis), die passend zu 'Dateiangabe' gefunden wurde. Wird 'Dateiangabe' ausgelassen oder ein Leerstring übergeben, so wird die nächste Datei (bzw. Verzeichnis) zurückgegeben, die auf das zuletzt angegebene Pattern passt.
'Dateiangabe' darf auch Pfadangaben und Wildcards enthalten. Die Dateinamen bzw. Verzeichnisse werden mit dem angegebenen Muster verglichen. Durch Wildcards, also Platzhalter, kann es auf mehrere Dateien und/oder Verzeichnisse passen. Folgende Wildcards sind möglich:
- * - eine beliebige Zeichenfolge
- ? - ein beliebiges Zeichen, jedoch nur eines.
Beispielsweise passt die Angabe "a*.b??" auf alle Daten oder Verzeichnisse, die mit einem a beginnen und deren Endung mit einem b beginnt und 3 Zeichen lang ist. Mögliche Ergebnisse wären also z. B. allocate.bas und a.bin
Das Dollarzeichen ($) als Suffix ist optional.
Dateiattribute
'Attributnummer' ist eine Zahl, die angibt, welche Attribute die zurückzugebenden Dateien haben sollen. Sie ist eine Kombination aus folgenden Werten:
Wert | Bedeutung | Konstante in der dir.bi |
---|---|---|
&h00 | Normal | - keines - |
&h01 | Schreibgeschützt Windows: Das Attribut 'Schreibgeschützt' ist gesetzt. Linux: Die Schreibberechtigung des aktuellen Benutzers und seiner Gruppenzugehörigkeit sowie die globale Schreibberechtigung wird geprüft; root-Berechtigungen des Benutzers werden ignoriert. |
fbReadOnly |
&h02 | Versteckt Windows: Das Attribut 'Versteckt' ist gesetzt. Linux: Der Datei-/Verzeichnisname beginnt mit einem Punkt. |
fbHidden |
&h04 | System Windows: Das Attribut 'System' ist gesetzt. Linux: Es handelt sich um ein zeichenorientiertes Gerät (character device), ein blockorientiertes Gerät (block device), ein Named Pipe (FIFO) oder ein Unix-Socket. |
fbSystem |
&h10 | Verzeichnis | fbDirectory |
&h20 | Archivierbar Windows: Das Attribut 'Archiv' ist gesetzt. Die unter Linux üblichen Dateisysteme unterstützen dies nicht. |
fbArchive |
&h21 | Dateien, die archivierbar oder schreibgeschützt sind | fbNormal |
Um die angegebenen Konstanten zu nutzen, müssen Sie mittels #INCLUDE die Datei dir.bi einbinden.
Die oben genannten Eigenschaften können durch eine OR-Verknüpfung kombiniert werden. Der Befehl gibt dann alle Dateien zurück, die in das Muster passen und mindestens ein Attributkriterium erfüllen. Will man also alle schreibgeschützten oder versteckten Dateien auflisten, muss die Attributnummer fbReadOnly OR fbHidden angegeben werden. Als Ergebnis werden hier schreibgeschützte Dateien, versteckte Dateien und schreibgeschützte, versteckte Dateien aufgelistet. Wird 'AttributNummer' ausgelassen, so nimmt FreeBASIC automatisch fbNormal an; dies entspricht einer Liste aller normalen Dateien, inklusive schreibgeschützter und archivierter Dateien.
Wird 'Rückgabeattribut' angegeben, schreibt FreeBASIC an die Speicherstelle, auf die 'Rückgabeattribut' verweist, welche Attribute auf die gefundene Datei oder Ordner tatsächlich zutreffen. Dadurch kann die Ausgabe selektiver gestaltet werden. Wollen Sie beispielsweise eine Liste aller Dateien in einem Verzeichnis erstellen, die schreibgeschützt sind und entweder archivierbar sind oder als versteckt markiert wurden, so können Sie zunächst mit 'Attributnummer' fbReadOnly OR fbArchive OR fbHidden eine Ausgabe von Dateien erreichen, bei denen mindestens eines der Kriterien erfüllt ist. Mit 'Rückgabeattribut' kann dann geprüft werden, ob die Datei tatsächlich mehrere Kriterien erfüllt; die entsprechende Zeile könnte so aussehen:
IF (rAttr AND fbReadOnly) ANDALSO _
((rAttr AND fbHidden) ORELSE (rAttr AND fbArchive)) THEN ...
Beispiel 1: Zwei Dateien anzeigen, die mit "a" beginnen
PRINT DIR("a*", 0)
PRINT DIR()
SLEEP
Beispiel 2: Verwendung der Attributnummer
#INCLUDE "dir.bi"
DECLARE SUB listFiles (filespec AS STRING, attrib AS INTEGER)
SUB listFiles (filespec AS STRING, attrib AS INTEGER)
' alle Dateien mit den angegebenen Attributen auflisten
DIM filename AS STRING
filename = DIR(filespec, attrib)
DO
PRINT SPACE(4); filename
filename = DIR("", attrib)
LOOP WHILE LEN(filename)
END SUB
PRINT "Unterordner:"
listFiles "*", fbDirectory
PRINT "archive files:"
listFiles "*", fbArchive
PRINT "Versteckte und/oder Systemdateien, die mit 'a' beginnen:"
listFiles "a*", fbHidden OR fbSystem
SLEEP
Beispiel 3: Alle Dateien und Ordner, die nicht versteckt sind, in einem Array speichern und ausgeben:
#INCLUDE "dir.bi"
sub GetFiles( Array() as string )
dim as string s
dim as integer attr, i
redim Array(0)
s = dir("*",, @attr)
do until s = ""
if (attr and fbHidden) = 0 then
i += 1
redim preserve Array(i)
Array(i) = s
end if
' Da hier geprüft wird, ob das gewünschte Dateiattibut zu jeder
' Datei gesetzt ist, muss @attr bei jedem Aufruf übergeben werden.
s = dir("",, @attr)
loop
end sub
dim dateien() as string
GetFiles dateien()
for i as integer = 1 to ubound(dateien)
print i, dateien(i)
next
sleep
Unterschiede zu QB:
- DIR existiert nicht in QB, sondern nur in Visual Basic.
- Das Rückgabeattribut existiert nur in FreeBASIC.
Plattformbedingte Unterschiede:
- Die Bedeutung der Dateiattribute ist unter Linux und Windows/DOS zum Teil verschieden (siehe Tabelle).
- Unter Linux muss der Dateiname 'case sensitive' erfolgen. Windows und DOS sind 'case insensitive'.
- Das Trennzeichen für den Dateipfad ist unter Linux der vorwärtsgerichtete Slash /. Windows verwendet den Backslash \, erlaubt aber auch der Slash. DOS verwendet den Backslash.
- Unter DOS gibt die Attributsmaske &h37 alle Dateien und Ordner, einschließlich "." und "..", zurück, jedoch keine Datenträger. Der Wert &h08 gibt den Datenträger zurück, auch wenn das aktuelle Arbeitsverzeichnis nicht das Hauptverzeichnis ist.
Unterschiede zu früheren Versionen von FreeBASIC:
- Der optionale Parameter 'Rückgabeattribut' existiert seit v0.20.
- Seit FreeBASIC v0.13 ist der erste Parameter 'Dateiangabe' optional.
Unterschiede unter den FB-Dialektformen:
In der Dialektform -lang qb steht DIR nicht zur Verfügung und kann nur über __DIR aufgerufen werden.
Siehe auch:
FILEEXISTS, OPEN, CURDIR, MKDIR, RMDIR, Betriebssystem-Anweisungen
Zusätzliche Informationen und Funktionen | ||||
---|---|---|---|---|
|
|