Readdir problem...

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

icoon

Betreff: Readdir problem...

BeitragSa, Feb 04, 2006 16:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi, ich möchte gerne aus meiner festplatte eine Datei suchen.

Nehmen wir mal an ich suche meine: counterstrike.exe mit dem namen:
"cstrike.exe"

Ich habe den code so :

Code: [AUSKLAPPEN]

test$=Readdir("c:/")
Repeat
if file$="cstrike.exe" Then
Print File$
Waitkey()
else
Print str+(a)
a = a+1
Endif
Forever
closedir(test)


Aber es funktioniert nicht. Nach 30min hat er über 1milliarden dateinen durchsucht soviele hab ich gar nicht in meiner festplatte
ich bitte um hilfe.
Wieder ein coder unterwegs ^^

D2006

Administrator

BeitragSa, Feb 04, 2006 16:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Hehe.

Du musst natürlich auch ReadDir richtig benutzen.
Zur Zeit öffnest du nur ein Verzeichnis, du liest es nicht aus.

Schau dir dazu diesen Befehl an:
ql:NextFile

MfG
D2006
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard
Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium
Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2
 

icoon

BeitragSa, Feb 04, 2006 16:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist dumm??

Code: [AUSKLAPPEN]

Verz=READDIR("C:\")
REPEAT
   Datei$=NEXTFILE$(Verz)
   IF Datei$= THEN EXIT
   IF FILETYPE("C:\"+Datei$) = 2 THEN
      PRINT "Ordner:" + Datei$
   ELSE
      PRINT "Datei:" + Datei$
   END IF
FOREVER
CLOSEDIR Verz
PRINT
PRINT "-Ende-"


1. Da stehen keine Ordner
2. IF Datei$= THEN EXIT <---- was ist das da fehlt was ?
Wieder ein coder unterwegs ^^

D2006

Administrator

BeitragSa, Feb 04, 2006 16:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Da muss ein "" sein. Hat TheShadow wohl vergessen. Das heißt nur, dass wenn NextFile einen Leerstring ausspuckt, is alles rausgelesen aus dem Verzeichnis.

MfG
D2006
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard
Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium
Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2
 

icoon

BeitragSa, Feb 04, 2006 18:44
Antworten mit Zitat
Benutzer-Profile anzeigen
das hab ich jetzt und auch ein bisschen ausgebaut

aber wo muss ich denn den if befehl eingeben
z.b

Code: [AUSKLAPPEN]

If file$ = "cstrike.exe" Then
Print "gefunden!!!!"
waitkey()
endif


Und wie kann ich in allen ordnern suchen?
Der sucht nur die dateien in C: nicht in den ordnern?
Wieder ein coder unterwegs ^^
 

HW

BeitragSa, Feb 04, 2006 18:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Mit ql:filetype kannst du prüfen, ob die gelesene Datei ein Verzeichnis/ein Ordner ist. Wenn ja, kannst du es mit ql:readdir lesen.
Dort gehst du wieder wie genannt vor. Am Besten, du machst eine Funktion, die eine Schleife beinhaltet, die so lange arbeitet, bis ql:Nextdir einen leeren String ausgibt. Die Funktion sollte sich auch selbst aufrufen können, damit auch Unterordner untersucht werden. Aber du solltest das dann im Fenstermodus machen, da eine Endlosschleife entstehen könnte, die im Vollbildmodus die Oberhand gewinnen könnte.

Also in etwa so:
Code: [AUSKLAPPEN]
Function SearchDir$(path$,search$)
dir=ReadDir(path$)
Repeat
file$=NextFile(dir)
If FileType(file$)=2 Then file$=SearchDir$(path$+file$,search$)
Until file$="" Or Instr(file$,search$)>0
CloseDir(dir)
If Instr(file$,search$)>0 Then Return path$+file$
End Function


Ich kann aber nicht versprechen, dass der Code funktioniert.
Edit: Habe die Funktion getestet, sie funktioniert nicht. Wie auch, ich habe sie in einigen Sekunden/Minuten zusammengebastelt. Du solltest dir aber auch selbst eine Funktion machen können, umso mehr lernst du dabei.
Ist am Besten, wenn man den Debuglog einsetzt. Wink
Ich habe mithilfe des Debuggers schon die Ursache gefunden: Irgendwie ergibt ql:filetype ständig 0.
Ich weiß auch schon, wie man das beheben kann, aber das lasse ich mal dir offen. Wink
 

Florian

BeitragSa, Feb 04, 2006 19:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]

Const Ordner_Konnte_Nicht_auslesen_Werden=2
Const COrdner=2
Const CDatei=1

Print SucheDatei("C:\","pointer.png")
WaitKey

Function SucheDatei$(Ordner$,SucheDatei$)
 If Right$(Ordner$,1)<>"\" Then
  Ordner$=Ordner$+"\"
 End If
 OrdnerNr=ReadDir(Ordner$)
 If OrdnerNr=0 Then Return ""
 Datei$=NextFile$(OrdnerNr)
 While Datei$<>""
  Select FileType((Ordner$+Datei$))
   Case COrdner
    If Datei$<>"." And Datei$<>".." Then   
     SucheDatei Ordner$+Datei$,SucheDatei$
    End If 
   Case CDatei
    If Lower$(SucheDatei$)=Lower$(Datei$) Then Return  Ordner$+Datei$
  End Select
  Datei$=NextFile$(OrdnerNr)
 Wend
End Function

Function Lower$(TEXT1$)
 If Len(TEXT1$)=0 Then Return ""
 For X=1 To Len(TEXT1$)
  If Asc(Mid$(TEXT1$,X,1))>64 And Asc(Mid$(TEXT1$,X,1))<91 Then
   Text2$=TEXT2$+Chr$(Asc(Mid$(TEXT1$,X,1))+32)               
  End If                                                       
  If Mid$(TEXT1$,X,1)="Ä" Then Text2$=TEXT2$+"ä"               
  If Mid$(TEXT1$,X,1)="Ü" Then Text2$=TEXT2$+"ü"
  If Mid$(TEXT1$,X,1)="Ö" Then Text2$=TEXT2$+"ö"
  If Len(Text2$)<X Then Text2$=TEXT2$+Mid$(TEXT1$,X,1)
 Next                                                 
 Return TEXT2$
End Function


 

HW

BeitragSa, Feb 04, 2006 21:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Florian, ich habe deine Funktion mal umgeändert, bei mir hat sie nämlich nicht so ganz funktioniert.
Code: [AUSKLAPPEN]
Function SearchFile$(Ordner$,SucheDatei$)

   If Right$(Ordner$,1)<>"\" Then
      Ordner$=Ordner$+"\"
   End If

   OrdnerNr=ReadDir(Ordner$)
   DebugLog "Search in directory "+Ordner$+" for file "+SucheDatei$
   
   If OrdnerNr=0 Then Return ""

   Datei$=NextFile$(OrdnerNr)
   DebugLog "Found file "+Datei$
   
   While Datei$<>""
      Select FileType((Ordner$+Datei$))
         Case COrdner
            If Datei$<>"." And Datei$<>".." Then   
               Datei$=SearchFile$(Ordner$+Datei$,SucheDatei$)
               If Instr(Datei$,SucheDatei$)>0 Then Return Datei$
            End If
         Case CDatei
            If Lower$(SucheDatei$)=Lower$(Datei$) Then Return Ordner$+Datei$
      End Select
      Datei$=NextFile$(OrdnerNr)
   Wend

End Function

Es sind noch einige Debugsachen drin, aber die sind hoffentlich nicht störend.
Aber kannst du mal erklären, was die Funktion Lower$() von dir macht/wie sie es macht?
Edit: Habs verstanden. Sie macht dasselbe wie das originale ql:lower , nur dass sie auch Umlaute verkleinert.
 

Florian

BeitragSa, Feb 04, 2006 22:03
Antworten mit Zitat
Benutzer-Profile anzeigen
@HW
Du hast die beiden Constanzen vergessen.

Code: [AUSKLAPPEN]

 Const COrdner=2
 Const CDatei=1

 

HW

BeitragSa, Feb 04, 2006 22:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe sie nicht vergessen, ich habe absichtlich nur die Funktion gepostet, weil der Post sonst zu groß geworden wäre.

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group