Alle Dateien in einem Verzeichnis auslesen

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

kog

Betreff: Alle Dateien in einem Verzeichnis auslesen

BeitragSo, Mai 14, 2006 21:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi wieder einmal, ich habe schon die Suche benutzt doch habe kein anständiges Script gefunden, meine Idee ist, wenn man einen Ordner angibt, das script daraus Alle dateien angibt auch die in den Subordner, doch irgendwie Funktioniert mein Script nicht:
BlitzBasic: [AUSKLAPPEN]
Function getfiles(dir$)
verz=ReadDir(dir$)
Repeat
test$=NextFile$(verz)
If FileType(dir$+"\"+test$)=2 Then
getfiles(dir$+"\"+test$)
ElseIf FileType(dir$+"\"+test$)=1 Then
If mode=0 Then
If Right(test$, 4)=".bmp" Or Right(test$, 4)=".jpg" Then
AddGadgetItem list,dir$+"\"+test$
EndIf
ElseIf mode=1 Then
If Right(test$, 4)=".wav" Then
AddGadgetItem list,dir$+"\"+test$
EndIf
EndIf
EndIf
Until test$=""
CloseDir(verz)
End Function

Ich habe den Debugger an, doch trotzdem kommt nur eine Fehlermeldung worauf nichts steht, achja ich arbeite mit BlitzPlus

mfg
k.o.g.

SoNenTyp

BeitragSo, Mai 14, 2006 21:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie da kommt nur eine leere Fehlermeldung in der du nur OK drücken kannst? Ohne Text?
Gruss Der Typ.

User posted image

kog

BeitragSo, Mai 14, 2006 21:38
Antworten mit Zitat
Benutzer-Profile anzeigen
es kommt das normale Error Fenster, auch wenn ich den debugger anhabe:
user posted image

D2006

Administrator

BeitragSo, Mai 14, 2006 21:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich könnte mir da ein Stack bzw. Buffer Overflow vorstellen, weil du vergessen hast, dass beim auslesen von Verzeichnissen auch "." und ".." ausgelesen werden. Dadruch ruft sich die Funktion immer und immer wieder selbst auf.

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

kog

BeitragSo, Mai 14, 2006 21:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Habe es jetzt so gemacht:
BlitzBasic: [AUSKLAPPEN]
Function getfiles(dir$)
verz=ReadDir(dir$)
Repeat
test$=NextFile(verz)
If test$<>".." And test$<>"." Then
If FileType(dir$+"\"+test$)=2 Then
getfiles(dir$+"\"+test$)
ElseIf FileType(dir$+"\"+test$)=1 Then
If mode=0 Then
If Right(test$, 4)=".bmp" Or Right(test$, 4)=".jpg" Then
AddGadgetItem list,dir$+"\"+test$
EndIf
ElseIf mode=1 Then
If Right(test$, 4)=".wav" Then
AddGadgetItem list,dir$+"\"+test$
EndIf
EndIf
EndIf
EndIf
Until test$=""
CloseDir(verz)
End Function

Doch es geht immernochnicht

Willi die Rübe

BeitragSo, Mai 14, 2006 21:48
Antworten mit Zitat
Benutzer-Profile anzeigen
In einem meiner aktuellen Projekte verwende ich auch so eine Routine, ich hab für dich mal das wesentliche rausgeschrieben:
Code: [AUSKLAPPEN]

Type file
   Field ftype%
   Field location$
   Field name$
  ; Field
End Type

dir("\Neuer Ordner (2)\")

For f.file=each file
 If f\ftype%=2 Then Print "Ordner"
 If f\ftype%=1 Then Print "Datei"
 Print f\location$
 Print f\name$
Next

WaitKey()

Function Dir(path$)

 path_id=ReadDir("."+path$)
 ChangeDir("."+path$)
 
 tmp1=NextFile$(path_id)
 tmp2=NextFile$(path_id)
 
 Repeat
    f.file = New file   
    f\name$=NextFile$(path_id)   
    f\location=currentdir()
    f\ftype=FileType(f\location+f\name$)
      If f\name$="" Then Delete f : Exit
 Forever
 
CloseDir path_id


   For f.file = Each file
       If f\ftype = 2 Then
      
         path2$=ReadDir(f\location+f\name)
         Changedir(f\location+f\name)
               
        tmp1=NextFile$(path2)
       tmp2=NextFile$(path2)
       
        Repeat
          tmp$=NextFile$(path2)
          If tmp$="" Then Exit
          f2.file = New file   
          f2\name$=tmp$
          f2\location=currentdir()
          f2\ftype=FileType(f2\location+f2\name$)           
        Forever
      CloseDir path2$
      EndIf
    Next   


 
End Function
[/code]
Ich habe keine Lösung, aber ich bewundere das Problem.
Tehadon
Q6600, MSI Neo2-FR, 4GB Ram, nVidia 7800 GTX

At the Farewell Party visit: MySpace | Homepage

kog

BeitragSo, Mai 14, 2006 21:51
Antworten mit Zitat
Benutzer-Profile anzeigen
hmm bei mir funktioniert dein Script nicht
 

Florian

BeitragSo, Mai 14, 2006 22:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]

Type DateiListeTyp
 Field Ordner$
 Field Dateiname$
 Field Erweiterung$
End Type

Const COrdner=2
Const CDatei=1
Global DateiListe.DateiListeTyp

SucheDateien "C:\","txt|"

Function SucheDateien(Ordner$,Erweiterung$)
 If Len(Erweiterung$)>0 Then
  If Right$(Erweiterung$,1)<>"|" Then
   Erweiterung$=Erweiterung$+1
  End If
 End If

 If Right$(Ordner$,1)<>"\" Then
  Ordner$=Ordner$+"\"
 End If
 LangErweiterung=Len(Erweiterung$)
 OrdnerNr=ReadDir(Ordner$)
 If OrdnerNr=0 Then Return Ordner_Konnte_Nicht_auslesen_Werden

 Datei$=NextFile$(OrdnerNr)
 While Datei$<>""
  Select FileType((Ordner$+Datei$))
   Case COrdner
    If Datei$<>"." And Datei$<>".." Then   
     SucheDateien Ordner$+Datei$,Erweiterung$
    End If 
   Case CDatei
    DateiErweiterung$=Mid$(Datei$,Instr(Datei$+".",".")+1)
    DateiName$=Mid$(Datei$,1,Instr(Datei$+".",".")-1)
    If LangErweiterung>0 Then
     ErweiterungStimmt=False
     For PosErweiterung=1 To LangErweiterung
      Select Mid$(Erweiterung$,PosErweiterung,1)
       Case "|"
        If Upper$(TestErweiterung$)=Upper$(DateiErweiterung$) Then
         ErweiterungStimmt=True
         Exit
        End If
        TestErweiterung$=""
       Default
        TestErweiterung$=TestErweiterung$+Mid$(Erweiterung$,PosErweiterung,1)
      End Select   
     Next
     TestErweiterung$=""
     If TestErweiterung$<>"" And Upper$(TestErweiterung$)=Upper$(DateiErweiterung$) Then
      ErweiterungStimmt=True
     End If
    End If   
    If ErweiterungStimmt=True Or LangErweiterung=0 Then
     DateiListe= New DateiListeTyp
     DateiListe\Dateiname$=Dateiname$
     DateiListe\Ordner$=Ordner$
     DateiListe\Erweiterung$=DateiErweiterung$
    End If
  End Select
  Datei$=NextFile$(OrdnerNr)
 Wend
End Function

Function Upper$(S$)
 Slen=Len(S)
 If Slen>0 Then
  For P=1 To Slen
   ASCII=Asc(Mid$(S$,P,1))
   If Ascii>96 And Ascii<123 Then
     Ascii=Ascii-32
    ElseIf Ascii=252 Then ;ü
     Ascii=220     
    ElseIf Ascii=228 Then ;ä
     Ascii=196 
    ElseIf Ascii=246 Then ;ö
     Ascii=214
   End If
   R$=R$+Chr$(ASCII)
  Next
  Return R$
 End If
End Function


Florian
Das große BlitzBasic Community Tutorial
Stackmaschine 2.0
  • Zuletzt bearbeitet von Florian am So, Mai 14, 2006 22:08, insgesamt einmal bearbeitet

kog

BeitragSo, Mai 14, 2006 22:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Gibt es kein einfaches Script?

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragSo, Mai 14, 2006 22:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Deins ist schon relativ gut, allerdings ist da ein kleiner Denkfehler drin
das Problem liegt an deiner Schleife
repeat ... until Text=""

wenn hier
test$ = NextFile (verz) test = "" wird trotzdem der Code weiter ausgefüht, aber das darf er nicht.
Das hier sollte funktionieren!
Code: [AUSKLAPPEN]
Function getfiles(dir$)
        verz=ReadDir(dir$)
        Repeat
             test$=NextFile$(verz)
If Test$="" then exit
                If FileType(dir$+"\"+test$)=2 Then
                        getfiles(dir$+"\"+test$)
                ElseIf FileType(dir$+"\"+test$)=1 Then
                If mode=0 Then
                  If Right(test$, 4)=".bmp" Or Right(test$, 4)=".jpg" Then
                       AddGadgetItem list,dir$+"\"+test$
                        EndIf
                ElseIf mode=1 Then
                  If Right(test$, 4)=".wav" Then
                       AddGadgetItem list,dir$+"\"+test$
                        EndIf
                EndIf
                EndIf
        forever
        CloseDir(verz)
End Function
[BB2D | BB3D | BB+]

kog

BeitragSo, Mai 14, 2006 22:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielen dank, dank deiner Hilfe funktioniert es jetzt:
BlitzBasic: [AUSKLAPPEN]
Function getfiles(dir$)
verz=ReadDir(dir$)
Repeat
test$=NextFile$(verz)
If test$<>".." And test$<>"." Then
If test$="" Then Exit
If FileType(dir$+"\"+test$)=2 Then
getfiles(dir$+"\"+test$)
ElseIf FileType(dir$+"\"+test$)=1 Then
If mode=0 Then
If Right(test$, 4)=".bmp" Or Right(test$, 4)=".jpg" Then
AddGadgetItem list,dir$+"\"+test$
EndIf
ElseIf mode=1 Then
If Right(test$, 4)=".wav" Then
AddGadgetItem list,dir$+"\"+test$
EndIf
EndIf
EndIf
EndIf
Forever
CloseDir(verz)
End Function

Gleich für alle Wink

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group