Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
SL
Anmeldungsdatum: 06.12.2009 Beiträge: 43
|
Verfasst am: 15.12.2009, 18:50 Titel: DIR$ erkennt kein Verzeichnis |
|
|
Hi,
mir bereitet der DIR$-Befehl ziemliche Kopfschmerzen. Ich will mit dem nachfolgenden Programm im aktuellen Verzeichnis alle Dateien und Verzeichnisse auslesen. Die Dateien werden angezeigt, Verzeichnisse leider nicht. Wo liegt mein Fehler?
(Noch eine Anfängerfrage: Wie stelle ich den ASCII-CODE ein, damit ein ü im Editor in der Konsole auch als ü auftaucht und nicht als ³.)
Code: | WIDTH 90,25 : color 0, 9 : CLS
DIM AS STRING A
DIM AS INTEGER Z = 2
PRINT "Eintrag Nr 1: " + DIR$ ("*")
DO
A = DIR$
IF A = "" THEN EXIT DO
PRINT "Eintrag Nr " + STR(Z)+ ": "+ A
Z +=1
LOOP
PRINT
PRINT"Warte solange, bis eine Taste gedrückt wurde"
DO
LOOP UNTIL INKEY <> "" |
|
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 15.12.2009, 20:26 Titel: |
|
|
Das alles hätte die die Referenz bzw. FAQ beantworten können!
Refereneintrag "DIR" (bitte ohne $-Suffix benutzen)
FAQ-Eintrag zum Thema "Umlaute" _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
St_W

Anmeldungsdatum: 22.07.2007 Beiträge: 956 Wohnort: Austria
|
Verfasst am: 15.12.2009, 20:43 Titel: |
|
|
Ein kleines einfaches Beispiel zur Verwendung von DIR() zum Anzeigen von Ordnern und Dateien:
Code: | dim dat as String
dim attr as UInteger
'Ordner
dat = dir("*", 1+2+4+16+32, attr)
while (dat <> "")
if attr and 16 then print "[";dat;"]"
dat = dir(attr)
Wend
'Dateien
dat = dir("*")
while (dat <> "")
print dat
dat = dir()
Wend
sleep |
Zum Herausfiltern der Dateien musst du zusätzlich ein spezielles Bit in den Attributen setzen. Näheres dazu findest du in der Referenz. Dort findest du auch noch weitere Bits um z.B. auch System- oder Versteckte Dateien anzuzeigen.
Damit Umlaute richtig in der Konsole dargestellt werden, müsstest du die Textdatei mit dem alten aus DOS-Zeiten bekannten OEM-ASCII-Zeichensatz abspeichern, was jedoch nur die wenigsten Windows-Programme können. Besser, aber umständlicher, ist es die Umlaute mit chr(Code) zu erzeugen.[/code] _________________ Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken) |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 15.12.2009, 21:00 Titel: |
|
|
St_W: Konstanten statt den von FB bereitgestellten Defines zu benutzen ist böse. Nach nem Jahr weißt du nicht mehr, was 16 ist. Und nein, die dir.bi zu includen bläht das Programm nicht mit unnützen Krams auf! _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 15.12.2009, 21:10 Titel: |
|
|
Besser die vbcompat.bi einbinden. Das ist absolut vernachlässigbar. |
|
Nach oben |
|
 |
SL
Anmeldungsdatum: 06.12.2009 Beiträge: 43
|
Verfasst am: 15.12.2009, 22:40 Titel: |
|
|
@ ST_W,
zunächst mal finde ich es von dir sehr freundlich, dass du mir hier ohne Umschweife weiterhilft.
Ich habe deinen Code bei mir getestet und es funktioniert problemlos. Ich muß gestehen, ohne deine Hilfe - nur allein mit der Befehls-Referenz - wäre ich nie draufgekommen, wie Verzeichnisse mittels DIR zu ermitteln sind. |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 15.12.2009, 22:52 Titel: |
|
|
Zitat: | Eine weitere Einsatzmöglichkeit ist die Auflistung der Unterordner in einem Verzeichnis; |
Sei mal ehrlich, ist der Satz so unverständlich formuliert? _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
SL
Anmeldungsdatum: 06.12.2009 Beiträge: 43
|
Verfasst am: 16.12.2009, 19:29 Titel: |
|
|
@ Jojo
Die Erklärung von "DIR“ in der Befehlsreferenz ist für mich insgesamt zu unverständlich, zumal tückischerweise für Dateinamen und Verzeichnisnamen völlig unterschiedliche Vorgehensweisen nötig sind - im Gegensatz zum gleichnamigen DOS-Befehl "DIR“. Ich meine, das sollte in der Referenz etwas klarer zum Ausdruck kommen.
Es kommt vielleicht auch darauf an, aus welcher Sicht die Befehlsreferenz gelesen wird. Für einen, der neben der Festplatte haust, klingt die Erklärung eines nicht ganz einfachen Befehls vermutlich völlig anders, als für jemand, der eigentlich kaum programmieren kann (so wie ich).
Doch zum Glück gibt es ja dieses Forum hier. Da wird einem geholfen! So oder so!
Zurück zu "DIR“. Der Befehl war mir auch deshalb suspekt, weil in bestimmten Fällen eine bi-Datei nötig ist. So was täte ich gerne vermeiden. Denn falls der Befehl im Code später wieder obsolet wird, dann steht wahrscheinlich völlig einsam und verwaist eine nutzlose bi-Datei rum (Zumindest bei mir). Deshalb finde ich die Lösung von St_W besonders gelungen. |
|
Nach oben |
|
 |
St_W

Anmeldungsdatum: 22.07.2007 Beiträge: 956 Wohnort: Austria
|
Verfasst am: 16.12.2009, 21:24 Titel: |
|
|
SL hat Folgendes geschrieben: | Zurück zu "DIR“. Der Befehl war mir auch deshalb suspekt, weil in bestimmten Fällen eine bi-Datei nötig ist. So was täte ich gerne vermeiden. Denn falls der Befehl im Code später wieder obsolet wird, dann steht wahrscheinlich völlig einsam und verwaist eine nutzlose bi-Datei rum (Zumindest bei mir). Deshalb finde ich die Lösung von St_W besonders gelungen. |
Jojo hat mit seinem Argument, dass die Zahlenkonstanten nach einer Zeit unverständlich sind, schon grundsätzlich recht. Wenn man später den Code wieder anschaut braucht man die Dokumentation zum Dir-Befehl, um zu verstehen, was diese Zahlenwerte bedeuten.
Du kannst ja auch die Konstante im Programm selbst definieren oder deine eigenen definieren (z.B. "#define fbDirAttrOrdner 1+2+4+16+32")
Code: | 'Dir Attribute
#define fbReadOnly &h01
#define fbHidden &h02
#define fbSystem &h04
#define fbDirectory &h10
#define fbArchive &h20
#define fbNormal (fbReadOnly or fbArchive)
dim dat as String
dim attr as UInteger
'Ordner
dat = dir("*", fbReadOnly+fbHidden+fbSystem+fbDirectory+fbArchive, attr)
while (dat <> "")
if attr and 16 then print "[";dat;"]"
dat = dir(attr)
Wend
'Dateien
dat = dir("*", fbReadOnly+fbHidden+fbSystem+fbArchive)
while (dat <> "")
print dat
dat = dir()
Wend
sleep |
Wie du es dann löst ist grundsätzlich schlicht und einfach Geschmackssache. _________________ Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken) |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 17.12.2009, 12:08 Titel: |
|
|
ist etwas pingelig aber auf solche Konstanten sollte man nur OR, AND und NOT anwenden
Code: | ...
dat = DIR("*", fbReadOnly or fbHidden or fbSystem or fbArchive)
...
' und dann auch
IF attr AND fbDirectory THEN PRINT "[";dat;"]"
...
|
_________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 17.12.2009, 17:54 Titel: |
|
|
Kann ich nur zustimmen... _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
|