Readdir problem...
Übersicht

icoonBetreff: Readdir problem... |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ^^ |
![]() |
D2006Administrator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 "-Ende-" 1. Da stehen keine Ordner 2. IF Datei$= THEN EXIT <---- was ist das da fehlt was ? |
||
Wieder ein coder unterwegs ^^ |
![]() |
D2006Administrator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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. ![]() 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. ![]() |
||
Florian |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@HW
Du hast die beiden Constanzen vergessen. Code: [AUSKLAPPEN] Const COrdner=2 Const CDatei=1 |
||
HW |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich habe sie nicht vergessen, ich habe absichtlich nur die Funktion gepostet, weil der Post sonst zu groß geworden wäre. | ||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group