Seite 1 von 1

Verzeichnis auslesen und nach Datum sortieren

Verfasst: 20.03.2012 22:59
von Micro
Hallo ihr alle,

ich möchte ein Verzeichnis nach Datum sortiert auslesen und den Namen der neuesten Datei als Rückgabewert haben.
Wie geht das am einfachsten? Als Procedure wäre super, komme aber einfach nicht auf den Dreh...

Gruß Fank

Re: Verzeichnis auslesen und nach Datum sortieren

Verfasst: 20.03.2012 23:27
von Sunny
Meinst du vieleicht etwas in der Art?

Code: Alles auswählen

Structure ent
  date.i
  name.s
EndStructure

NewList Entrys.ent()

Procedure SortFiles(Dir.s, List Entrys.ent())
  
  
  If ExamineDirectory(0, Dir, "*.*")
    While NextDirectoryEntry(0)
      AddElement(Entrys())
      Entrys()\date = DirectoryEntryDate(0, #PB_Date_Modified) ;#PB_Date_Modified = letzte veränderung / #PB_Date_Accessed = letzter Zugriff / #PB_Date_Created = Erstellungs-Datum
      Entrys()\name = DirectoryEntryName(0)
    Wend
    
    SortStructuredList(Entrys(), #PB_Sort_Ascending, OffsetOf(ent\date), #PB_Sort_Integer) ; #PB_Sort_Ascending = aufsteigend / #PB_Sort_Descending = absteigend
    
    FinishDirectory(0)
  EndIf
  
EndProcedure


SortFiles("C:\", Entrys())

ForEach Entrys()
  Debug Entrys()\name
  
Next

Re: Verzeichnis auslesen und nach Datum sortieren

Verfasst: 20.03.2012 23:29
von ts-soft

Code: Alles auswählen

Procedure.s bla(dir.s)
  Protected date, tmp, result.s
  Protected exDir = ExamineDirectory(#PB_Any, dir, "*.*")
  
  If exDir
    While NextDirectoryEntry(exDir)
      If DirectoryEntryType(exDir) = #PB_DirectoryEntry_File
        tmp = DirectoryEntryDate(exDir, #PB_Date_Modified)
        If tmp > date
          date = tmp
          result = DirectoryEntryName(exDir)
        EndIf
      EndIf
    Wend
    FinishDirectory(exDir)
  EndIf
  ProcedureReturn result
EndProcedure

Debug bla(GetTemporaryDirectory())

Re: Verzeichnis auslesen und nach Datum sortieren

Verfasst: 20.03.2012 23:43
von Micro
Leute, ihr macht mich wieder schwach...
Kaum eine Frage da, schon eine Antwort = RIESIG !!!!

Hab' auch in der zwischenzeit ein bssl gebastelt und (wie ich finde) ein recht unsauberen Code hingekrizelt:

Code: Alles auswählen


; Verzeichnisse dynamisch auslesen und festlegen
Procedure.s spec_folder(clsi_const.l) 
   path.s = Space(2048) 
   SHGetSpecialFolderLocation_(0,clsi_const,@pidl.l) 
   SHGetPathFromIDList_(pidl,@path) 
   CoTaskMemFree_(pidl) 
   ProcedureReturn path+"\" 
EndProcedure ; spec_folder()

Procedure.s sucheBackup(Liste.s)
	
	Structure Struktur
  Name.s
  Datum.l
	EndStructure

	NewList Datei.Struktur()
  If ExamineDirectory(0, spec_folder($5) + "Sicherung\", "*.zip")  
  	While NextDirectoryEntry(0)
  		If DirectoryEntryName(0) <> "." And DirectoryEntryName(0) <> ".."
  			AddElement(Datei())
  			Datei()\Name.s = DirectoryEntryName(0)
  			Datei()\Datum.l = DirectoryEntryDate(0, #PB_Date_Created)
     EndIf
    Wend
    FinishDirectory(0)
  EndIf
  
SortStructuredList(Datei(), #PB_Sort_Descending, OffsetOf(Struktur\Datum.l), #PB_Sort_Long)
  
  
ForEach Datei()
  Liste.s = Datei()\Name.s
Next
ProcedureReturn Liste.s

EndProcedure

result.s = sucheBackup(Liste.s)
Debug result.s

Man(n) merkt, das ich doch ab- und zu doch zu sehr das "Rad" neu erfinden will. Naja, werd's noch lernen :-)

So, nun aber zu den Lösungen von euch: Alle Lösungen sind RIESIG, keine Frage. Ich werde die Lösung von TS-Soft nehmen, ist einfach und schnell anzupassen!

Vielen Dank euch alle, habt mir wieder seeeehr gut und viel geholfen!

Viele Grüße aus Dortmund
Frank