Festplatte durchsuchen
Übersicht

LoD123Betreff: Festplatte durchsuchen |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich wollte mir eine Funktion schreiben mit der ich die Festplatte nach bestimmten Dateiendungen dursuchen kann.
Ich habe mir das so vorgestellt: Zuerst erstelle ich eine temporäre Datei mit dem Ordnerinhalt meiner Festplatte. Danach lese ich den ersten Eintrag aus, lösche ihn aus der Datei und überprüfe ihn. Wenn der Eintrag eine Datei ist, wird er falls er die richtige Dateienung hat gespeichert. Wenn nicht gehts einfach weiter. Wenn der Eintrag ein Ordner ist, wird in den gewechselt, wiederum eine temporäre Liste erstellt und genauso weitergemacht. Wenn die Liste leer ist, lösche ich sie und gehe wieder eine Ebene nach unten. Als Name für die temporären Dateien nehme ich den Ordnernamen. Das Problem daran ist, wenn in einem Ordner ein anderer Ordner mit gleichem Namen enthalten ist, wird die temporäre Datei überschrieben und das Programm haut nicht mehr hin. Ich habe mir schon überlegt anstatt der Ordnernamen, die Werte von Readdir() zu nehmen, aber anscheinend ändern sich die. Hier das ganze als Code: Code: [AUSKLAPPEN] Function search(where$,dir$) newdir$ = "" sglfile$ = dir$+"list.sgl" If where$ = "all" Then For root=67 To 90 ;Datenträger ab Buchstaben C: - Z: If FileType(sglfile$) = 1 Then file = OpenFile(sglfile$) SeekFile file,FileSize(sglfile$)-1 ;Daten werden immer ans Ende geschrieben Else file = WriteFile(sglfile$) EndIf ChangeDir(Chr$(root)+":") If CurrentDir$() = Chr$(root)+":\" Then ;Diese Zeile überprüft ob es den jeweiligen Datenträger überhaupt gibt Repeat name$ = relabs$(CurrentDir$()) makelist(name$) ;Erstellt die temporären Listen checkfile$ = readlist$(name$) ;List den obersten Eintrag aus und löscht ihn SetStatusText(w_main,CurrentDir$()+checkfile$) If FileType(checkfile$) = 1 Then If Right$(checkfile$,3) = "txt" Then WriteLine file,CurrentDir$()+checkfile$ ;Schreibt absoluten Dateipfad in meine Liste EndIf ElseIf FileType(checkfile$) = 2 Then ChangeDir(checkfile$) Else dirold$=CurrentDir$() ChangeDir("..") dirnew$=CurrentDir$() deletelist(name$,-1) If dirold$=dirnew$ Then ;Überprüft ob Datenträger fertig dursucht wurde und startet mit dem nächsten Exit EndIf EndIf Forever EndIf CloseFile file Next EndIf End Function ; Diese Funktion erstellt den Namen für die temporäre Datei ;Ich habe vor den Namen der Datei noch die Größe der Dateien im Ordner drangehängt. Bringt aber nichts ;bei folgender Struktur: ; C:\ -> test\ -> test\ -> andererOrdner\ -> blabla... ;Also wenn nur der betreffende Ordner im anderen Ordner ist Function relabs$(rel$) dir=readdir(rel$) size=0 Repeat file$=nextfile$(dir) If file$<>"" Then size=size+filesize(file$) Else Exit EndIf forever curdir$ = Left(rel$,Len(rel$)-1) If Right$(curdir$,1) = ":" Then Return "root"+Left$(curdir$,1) EndIf pos=Instr(curdir$,"\") Repeat curdir$=Right(curdir$,Len(curdir$)-pos) pos=Instr(curdir$,"\") If pos=0 Then Exit Forever Return Str$(size)+curdir$ End Function makelist, readlist und deletelist sind nur noch zum Erstellen, Auslesen und Löschen der temporären Dateien da. Das Hauptproblem liegt also in der Benennung in der relabs-Funktion (was sich mal aus relative -> absolute zusammengesetzt hat). Eigentlich nur kleines Problem, viel Text und wirrer Code.. Ich hoffe aber trotzdem, dass irgendjemand eine Idee hat was ich dagegen machen könnte.. Vielen Dank schonmal LoD123 |
||
![]() |
TheProgrammer |
![]() Antworten mit Zitat ![]() |
---|---|---|
Speicher doch einfach deine Ordnerinhalte in Types. Am besten schreibst du dir eine Funktion, die sich ineinander verschachteln lässt, um alle Ordner zu durchsuchen.
Mfg TheProgrammer |
||
aktuelles Projekt: The last day of human being |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ihr macht es ganz schön kompliziert. Sowas programmiert man rekursiv. Hier mal ein kleines Beispiel
Code: [AUSKLAPPEN] Global anzahl
;Einlesen dirs("c:\windows") ;dirs(".") Print anzahl+" Textdateien gefunden" WaitKey End ;Dateien-Suchen Function dirs(pfad$) rdid=ReadDir(pfad$) Repeat datei$=Lower(NextFile$(rdid)) If datei$<>"." If datei$<>".." If datei$="" Exit If FileType(pfad$+"\"+datei$)=2 dirs(pfad$+"\"+datei$) Else If Right$(datei$,4)=".txt" Print pfad$+"\"+datei$ anzahl=anzahl+1 End If End If End If End If Forever CloseDir rdid End Function Das Programm durchsuch alles ab "c:\windows" nach .txt -Dateien. Will man z.B. von dem Verzeichnis aus durchsuchen, wo sich die Blitz.EXE bzw. die .BB befindet, so startet man die Funktion mit dirs(".") Auf die globale Variable kann man verzichten, wenn man keine gefundene Anzahl wissen möchte. |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
LoD123 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Oha! An sowas hab ich noch gar net gedacht.
So isses wohl wirklich a weng unkomplizierter^^ Vielen Dank |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group