Festplatte durchsuchen

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

TheProgrammer

Betreff: Festplatte durchsuchen

BeitragSa, Jun 17, 2006 14:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Ich hatte gestern für ne halbe h etwas Langeweile und das ist dabei rausgekommen: ^^


Code: [AUSKLAPPEN]

Graphics 640,480,32,2
SetBuffer BackBuffer()

Print "Searching... (Esc to interrupt)":Print

Search("C:",".bb","Hello")

file = WriteFile("found.log")
For result.TResult = Each TREsult
 Print result\name$
 WriteLine file,result\name$
 Delete result
Next
CloseFile file

Print:Print "Result saved in "+CurrentDir()+"found.log"
Print "Press any key..."

WaitKey()
End()

; ***************
;
;  Mainfunctions
;
; ***************

Function Search(s_dir$,s_file$,word$="")

   dir_n% = GetParameterNumber(s_dir$)
   file_n% = GetParameterNumber(s_file$)
   word_n% = GetParameterNumber(word$)
   
   For I = 1 To dir_n%
    dir.TDir = New TDir
    dir\name$ = GetParameter(s_dir$,I)
   Next
   For I = 1 To file_n%
    file.TFile = New TFile
    file\name$ = GetParameter(s_file$,I)
   Next
   For I = 1 To word_n%
    w.TWord = New TWord
    w\name$ = GetParameter(word$,I)
   Next
   
   Repeat
    If KeyHit(1) Then FlushKeys() : Exit
   
    n% = 0
    For dir.TDir = Each TDir
     n% = n% + 1
    Next
    If Not(n%) Then
     empty = 1
    Else
     dir = Last TDir
   
     SearchDir(dir\name$,word$)
   
     Delete dir
    EndIf
   Until empty=1

   For file.TFile = Each TFile
    Delete file
   Next
   For dir.TDir = Each TDir
    Delete dir
   Next
   For w.TWord = Each TWord
    Delete w
   Next

End Function

; ****************
;
; Helper Functions
;
; ****************

Function GetParameterNumber%(txt$)

   Local n%=1
   
   While Instr(txt$,",")
    n% = n% + 1
    txt$ = Mid(txt$,Instr(txt$,",")+1,Len(txt$))
   Wend
   
   Return n%

End Function

Function GetParameter$(txt$, index)

   Local n%=1
   Local new_txt$=""
   
   Repeat
    If n% = index Then
     If Instr(txt$,",") Then
      new_txt$ = Mid(txt$,1,Instr(txt$,",")-1)
     Else
      new_txt$ = txt$
     EndIf
     Exit
    Else
     txt$ = Mid(txt$,Instr(txt$,",")+1,Len(txt$))
    EndIf
    n% = n% + 1
   Forever
   
   new_txt$ = Trim(new_txt$)
   Return new_txt$

End Function

Function SearchDir(dir$,word$)

   DebugLog dir$
   s_dir = ReadDir(dir$)
   If s_dir Then
   
    Repeat
     file$ = NextFile(s_dir)
   
     If file$="" Then Exit
     If FileType(dir$+"\"+file$) = 2 Then
      If file$ <> "." And file$ <> ".." Then
       new_dir.TDir = New TDir
       new_dir\name$ = dir$+"\"+file$
       Insert new_dir After First TDir
      EndIf
     Else
   
      If word$ <> "" Then
       o_file = ReadFile(dir$+"\"+file$)
       If o_file Then
        Repeat
         l$ = ReadLine(o_file)
         For w.TWord = Each TWord
          If Instr(Lower(l$),Lower(w\name$)) Then
           n% = 0
           For result.TResult = Each TResult
            If Lower(result\name$) = Lower(dir$+"\"+file$) Then n% = 1 : Exit
           Next
           If n% = 0 Then
            result.TResult = New TResult
            result\name$ = dir$+"\"+file$
            DebugLog "Found: "+result\name$
           EndIf
          EndIf
         Next
        Until Eof(o_file)
        CloseFile o_file
       EndIf
      EndIf
   
      For all_files.TFile = Each TFile
       If Instr(Lower(file$),Lower(all_files\name$)) Then
        n% = 0
        For result.TResult = Each TResult
         If Lower(result\name$) = Lower(dir$+"\"+file$) Then n% = 1 : Exit
        Next
        If n% = 0 Then
         result.TResult = New TResult
         result\name$ = dir$+"\"+file$
         DebugLog "Found: "+result\name$
        EndIf
       EndIf
      Next
     EndIf
   
    Forever
   
    CloseDir s_dir
   EndIf

End Function

; ***************
;
;     Types
;
; ***************

Type TDir
 Field name$
End Type

Type TFile
 Field name$
End Type

Type TResult
 Field name$
End Type

Type TWord
 Field name$
End Type



...eine einfache Suchroutine, mit der man Ordner auf seiner Festplatte nach Dateien durchsuchen kann. Man kann verschiedene Ordner angeben, die durchsucht werden sollen und verschiedene Wörter, die in den Dateien, die gesucht werden sollen, vorkommen müssen. (durch Kommas getrennt)

Vlt. kann es ja jemand gebrauchen ^^
Feedback wünschenswert...

Mfg
TheProgrammer
aktuelles Projekt: The last day of human being
  • Zuletzt bearbeitet von TheProgrammer am Sa, Jun 17, 2006 22:53, insgesamt einmal bearbeitet
 

$tankY

BeitragSa, Jun 17, 2006 21:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Nice, funktioniert ganz gut, dachte der kann auch noch die Dateien nach bestimmten Wörtern durchsuchen.

TheProgrammer

BeitragSa, Jun 17, 2006 22:56
Antworten mit Zitat
Benutzer-Profile anzeigen
So,
ich habe jetzt den optionalen Parameter hinzugefügt, in dem man angeben kann, nach welchen Wörtern der Inhalt der Dateien durchsucht werden soll. (Es können natürlich wieder mehrere Wörter mit Komma getrennt angegeben werden ^^) Dadurch läuft es jetzt aber viel langsamer.

Mfg
TheProgrammer
aktuelles Projekt: The last day of human being

Blitzcoder

Newsposter

BeitragSo, Jun 18, 2006 13:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Schön. Ich hab auch mal sowas geschrieben, allerdings hab ichs mir zerknallt, als ich einbauen wollte, dass er zips durchsucht.
Bau doch eine Indizierung ein, sodass er t.B. immer in der Mittagspause alle Dateien indiziert(nicht den Inhalt, nur die Namen), und der Anwender dann immer ganz schnell Suchen kann. Vielleicht kannst du die Vista Suche überbieten Wink


MfG Blitzcoder

PS: Deine Homepage ist down. Schade, ich wollte mir mal TlDoHb anschauen.
P4 3 Ghz@3,55Ghz|GF 6600GT 256MB|Samsung 80GB | 2x Samsung 160GB|2048MB DDR-400 RAM|6 Mbit Flatrate | Logitech G15 | Samsung 225BW-TFT | Ubuntu Gutsy Linux | Windows Vista | Desktop | Blog | CollIDE | Worklog
________________
|°°°°°°°°°°°°°°||'""|""\__,_
|______________ ||__ |__|__ |)
|(@) |(@)"""**|(@)(@)****|(@)

TheProgrammer

BeitragSo, Jun 18, 2006 20:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Aus dem Suchprogramm könnte man vlt. echt noch was Größeres machen, es war eigentlich nur ne ganz kleine Spielerei. Aber wenn ich Zeit habe, werde ich das noch ein bischen erweitern. ^^

Die Seite sollte bald wieder on sein. Es gab leider ein paar Angriffe auf den Server, bis er überhitzt war und sich abgestellt hat. Da waren an einem Tag aufeinmal 40 Gig traffic Shocked

Mfg
TheProgrammer
aktuelles Projekt: The last day of human being
 

$tankY

BeitragSo, Jun 25, 2006 23:07
Antworten mit Zitat
Benutzer-Profile anzeigen
wenn man sich die mühe macht, könnte man einen virenscanner machen, was sich aber nicht rentieren würde^^
EDIT: hab eben ein wenig das codearchiv durchkramt und das gefunden: https://www.blitzforum.de/foru...php?t=1903

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group