Seite 1 von 1

Elegantes einlesen eines Verzeichnises mit Structure ?

Verfasst: 13.03.2011 19:58
von anubclaw
Hallo liebe Community,
ich habe heute folgendes Probiert und es funktioniert einfach nicht obwohl es theoretisch funktionieren sollte alles hatte mit arrays funktioniert aber bei Structures hakt es bei mir immer aus.
Was möchte ich erreichen ?
Einlesen eines Verzeichnisses und ablegen der Filenamen in eine Structure:

Meine Bitte: Kann da mal jemand drübergucken ich habe heute schon 3 x alles umgestellt aber ich bekomme immer noch die Fehlermeldung in Zeile 16: "Garbage at end of the line"

Code: Alles auswählen

Dim dir$(1)
folder$="d:\storage\fdm download"
SetCurrentDirectory(folder$)
Structure dirlist
  filename.s
  files.s
  filetype.s
 EndStructure
NewList dirl.dirlist()
ClearList(dirl.dirlist())  
If ExamineDirectory(0, folder$, "*.mp4")  
      While NextDirectoryEntry(0)
      If DirectoryEntryType(0) = #PB_DirectoryEntry_File
        dirl.dirlist\filetype()= "[File]"
      Else
        dirl.dirlist\filetype() = "[Sub-Dir]"
      EndIf
      dirs\files()=Str(DirectoryEntrySize(0)
      If AddElement(dirl.dirlist\filename())<>0
        dirl.dirlist\filename()=DirectoryEntryName(0) 
      EndIf
    Wend
      ForEach dirl.dirlist()
        Debug dirl.dirlist\filename()
        Debug dirl.dirlst\files()
        Debug dirl.dirlist\filetype()
      Next
      
       
    FinishDirectory(0)
  EndIf


Re: Elegantes einlesen eines Verzeichnises mit Structure ?

Verfasst: 13.03.2011 20:27
von NicTheQuick
Du hast die Klammern an die falsche Stelle gesetzt und noch andere Sachen falsch gemacht.
So geht's richtig:

Code: Alles auswählen

;Was macht das hier?
;Dim dir$(1)

folder$ = "d:\storage\fdm download/"

SetCurrentDirectory(folder$)

Enumeration ;FileTypes
	#File
	#Directory
EndEnumeration

Structure DirList
	fileName.s
	fileSize.q
	fileType.i
EndStructure

NewList dirl.DirList()

;Das ist unnötig
;ClearList(dirl()) 

If ExamineDirectory(0, folder$, "*.mp4")
	
	While NextDirectoryEntry(0)
		
		;Neues Element in dirl() anlegen und füllen
		If (AddElement(dirl()))
			If DirectoryEntryType(0) = #PB_DirectoryEntry_File
				dirl()\fileType = #File
				dirl()\fileSize = DirectoryEntrySize(0)
			Else
				dirl()\fileType = #Directory
			EndIf
			
			dirl()\fileName = DirectoryEntryName(0)
		EndIf
	Wend
	
	FinishDirectory(0)
	
	ForEach dirl()
		If dirl()\fileType = #Directory
			Debug "[DIR]"
			Debug dirl()\fileName
		Else
			Debug "[FILE]"
			Debug dirl()\fileName
			Debug dirl()\fileSize
		EndIf
	Next
	
EndIf

Re: Elegantes einlesen eines Verzeichnises mit Structure ?

Verfasst: 13.03.2011 21:04
von jear
Noch ein Vorschlag

Code: Alles auswählen

folder.s = "d:\storage\fdm download/"
ext.s = "*.mp4"

Structure dirlist
  filename.s
  size.q
EndStructure
NewList dirl.dirlist()

With dirl() 
  
  If ExamineDirectory(0, folder, ext)  
    While NextDirectoryEntry(0)
      If DirectoryEntryType(0) = #PB_DirectoryEntry_File
        AddElement(dirl())
        \filename = DirectoryEntryName(0)
        \size = DirectoryEntrySize(0) / 1024 ; NtQ : natürlich ist eine Float hier Unsinn!
      EndIf 
    Wend 
    FinishDirectory(0)
  Else
    Debug "Verzeichnis nicht vorhanden: " + folder 
    End
  EndIf
  
  Debug "Inhalt von Verzeichnis: " + folder
  ForEach dirl()
    Debug \filename + " - " + Strq(\size) + " KBytes"
  Next
  
EndWith

End
So wird ein einziges Verzeichnis aufgelistet. enn Du alles unterhalb des Verzeichnisses auflisten willst, musst Du das Ganze in eine sich selbst rekursiv aufrufende Prozedur packen.

Re: Elegantes einlesen eines Verzeichnises mit Structure ?

Verfasst: 13.03.2011 21:50
von NicTheQuick
@jear:
Das mit dem Float ist aber nicht dein Ernst, oder? Und warum nutzt du 'FileSize()', wenn es 'DirectoryEntrySize()' gibt?