Dateisucher / Ordnerausleser

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

darth

Betreff: Dateisucher / Ordnerausleser

BeitragMo, Okt 01, 2007 17:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,
immer häufiger (und auch durch die Zeit immer mal wieder) kam die Frage nach einem "Auslese"-Algorithmus auf.
"Wie suche ich alle Dateien aus einem Ordner aus" (was relativ einfach ist) aber auch (und nun wirds komplizierter) aus deren Unterordnern?
Daher habe ich mich hingesetzt und zwei Versionen geschrieben. Die eine liest nur und wirft zurück, die andere (eine Abwandlung des ersten) speichert in einem Type.

Version 1: (mit "print")
Code: [AUSKLAPPEN]
Global filezahl

leseaus("C:\",".txt")
WaitKey() : End

Function leseaus(dir$,endung$)
  If Right(dir$,1)<>"\" Then dir$=dir$+"\"
 verz=ReadDir(dir$)
 If verz<>0 Then
  Repeat
   dat$=NextFile(verz)
   If FileType(dir$+dat$)=1 Then
    If Right(dir$+dat$,Len(endung$))=endung$ Or endung$=".*" Or endung$="*.*" Then
     filezahl=filezahl+1 : Print filezahl+" "+dir$+dat$
    EndIf
   ElseIf FileType(dir$+dat$)=2 Then
    If dat$<>"." And dat$<>".." And dat$<>"" Then
     leseaus(dir$+dat$+"\",endung$)
    EndIf
   EndIf
  Until dat$=""
 EndIf
End Function


und die zweite (mit Type):
Code: [AUSKLAPPEN]
Type file
 Field name$
 Field verz$
End Type

leseaus("C:\",".txt")
For f.file=Each file
 Print f\verz$+f\name$
Next
WaitKey() : End

Function leseaus(dir$,endung$)
  If Right(dir$,1)<>"\" Then dir$=dir$+"\"
 verz=ReadDir(dir$)
 If verz<>0 Then
  Repeat
   dat$=NextFile(verz)
   If FileType(dir$+dat$)=1 Then
    If Right(dir$+dat$,Len(endung$))=endung$ Or endung$=".*" Or endung$="*.*" Then
     f.file=New file
      f\name$=dat$
      f\verz$=dir$
    EndIf
   ElseIf FileType(dir$+dat$)=2 Then
    If dat$<>"." And dat$<>".." And dat$<>"" Then
     leseaus(dir$+dat$+"\",endung$)
    EndIf
   EndIf
  Until dat$=""
 EndIf
End Function


Ich hoffe der Algorithmus erweist sich als mehrheitlich nützlich. Ansonsten steht es den Mods natürlich frei ihn bei Unpässlichkeit zu löschen Razz.
Diese Signatur ist leer.

Lunatix

BeitragMo, Okt 01, 2007 17:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Wer sowas nicht auf die Reihe bekommt sollte wohl nochmal Robs Kurse durcharbeiten... das sind Grundlagen meiner Meinung nach Rolling Eyes
[size=9]Pro|gram|mier|er: Ein Organismus, der Koffein in Software umwandelt.
Geben Sie eine beliebige 11-stellige Primzahl ein, um fortzusetzen...

darth

BeitragMo, Okt 01, 2007 19:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Möglich Junk, möglich.
Aber vllt kann es doch nicht jeder und muss nun nicht einen Thread eröffnen deswegen (es sei denn er benutzt keine Forensuche und tut es trotzdem).
Sollte es wirklich zu basisch sein, dann...
Diese Signatur ist leer.

FireballFlame

BeitragDo, Okt 04, 2007 2:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Sorry, wenns jetzt ein bisschen OffTopic ist, aber was mich bei der Gelegenheit mal interessieren würde - kann und wenn ja wie kann man aus einer Datei Informationen auslesen wie z.B. ihr Erstellungsdatum?
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit

Abrexxes

BeitragDo, Okt 04, 2007 11:56
Antworten mit Zitat
Benutzer-Profile anzeigen
A) Werden diese Daten im Filesystem gespeicher wobei NTFS schon sehr viele Angaben aufnehmen kann (falls nicht einiges in der reg deaktiviert wurde wie ich das zb gemacht habe für dot8.3namecreation). Diese Daten sollte man mit einer Userlib auslesen können.

B) Speichern viele Formate von sich aus Daten in dem Header, so speichert zb Microsoft in seinem *.doc Format (wer hätte das gedacht) alles. Von der Programm Version über den User bis zu allen Datums. Das einzige was noch nicht da steht ist wie oft der User pissen war und ob er eine gültige VISA hat. Aber das wird Microsoft sicher in Office 2009 auch noch einbauen. Der Header ist jetzt schon grösser als die meisten Daten die drin sind. Wink

cu
 

E. Urbach

ehemals "Basicprogger"

BeitragDo, Okt 04, 2007 16:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Sorry, wenns jetzt ein bisschen OffTopic ist, aber was mich bei der Gelegenheit mal interessieren würde - kann und wenn ja wie kann man aus einer Datei Informationen auslesen wie z.B. ihr Erstellungsdatum?

Bei B3D nur über DLLs oder WinAPI.
Ich würde die DLL-Methode wählen, hier der C++ Code, den du für B3D und selbstverständlich noch für die DLL-Kompilierung anpassen musst:
Code: [AUSKLAPPEN]
//FileTime
time_t FileTime(const char *file)
{
   struct stat fileInfo;
   
   if(stat(file, &fileInfo) != 0)
   {
      return 0;
   }
   
   return fileInfo.st_mtime;
}

Natürlich kann man mit der stat-Funktion nicht nur das Erstellungsdatum auslesen:
Code: [AUSKLAPPEN]
  struct stat {
    time_t    st_atime;      /* Datum des letzten Zugriffs */
    time_t    st_ctime;      /* Datum der letzten Statusänderung */
    dev_t     st_dev;        /* Gerätenummer */
    gid_t     st_gid;        /* Gruppennummer */
    ino_t     st_ino;        /* i-node Nummer */
    mode_t    st_mode;       /* Dateiattribute */
    time_t    st_mtime;      /* Datum der letzten Modifikation */
    nlink_t   st_nlink;      /* Anzahl der Dateiverweise (links) */
    off_t     st_size;       /* Dateigröße in Byte */
    off_t     st_blksize;    /* Blockgröße in Byte */
    uid_t     st_uid;        /* Eigentümernummer */
    dev_t     st_rdev;       /* Geräteidentifikationsnummer */
  };
The box said, "Requires Windows XP or better", so I installed Ubuntu | Linux is NOT Windows
Flua :: Profiler für BB und BMax :: Partikel-Engine für BMax :: Lyphia-Projekt Quellcode (BMax) :: Automatische Parallelisierung :: Meine Musik

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group