Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

DIR$ erkennt kein Verzeichnis

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
SL



Anmeldungsdatum: 06.12.2009
Beiträge: 43

BeitragVerfasst am: 15.12.2009, 18:50    Titel: DIR$ erkennt kein Verzeichnis Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 15.12.2009, 20:26    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 956
Wohnort: Austria

BeitragVerfasst am: 15.12.2009, 20:43    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 15.12.2009, 21:00    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 15.12.2009, 21:10    Titel: Antworten mit Zitat

Besser die vbcompat.bi einbinden. Das ist absolut vernachlässigbar.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
SL



Anmeldungsdatum: 06.12.2009
Beiträge: 43

BeitragVerfasst am: 15.12.2009, 22:40    Titel: Antworten mit Zitat

@ 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
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 15.12.2009, 22:52    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
SL



Anmeldungsdatum: 06.12.2009
Beiträge: 43

BeitragVerfasst am: 16.12.2009, 19:29    Titel: Antworten mit Zitat

@ 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
Benutzer-Profile anzeigen Private Nachricht senden
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 956
Wohnort: Austria

BeitragVerfasst am: 16.12.2009, 21:24    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 17.12.2009, 12:08    Titel: Antworten mit Zitat

ist etwas pingelig aber auf solche Konstanten sollte man nur OR, AND und NOT anwenden geschockt
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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 17.12.2009, 17:54    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz