Dateisucher / Ordnerausleser
Übersicht

![]() |
darthBetreff: Dateisucher / Ordnerausleser |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() |
||
Diese Signatur ist leer. |
![]() |
Lunatix |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wer sowas nicht auf die Reihe bekommt sollte wohl nochmal Robs Kurse durcharbeiten... das sind Grundlagen meiner Meinung nach ![]() |
||
[size=9]Pro|gram|mier|er: Ein Organismus, der Koffein in Software umwandelt.
Geben Sie eine beliebige 11-stellige Primzahl ein, um fortzusetzen... |
![]() |
darth |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit 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? | ||
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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. ![]() cu |
||
E. Urbachehemals "Basicprogger" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group