Verzeichnis auslesen und nach Datum sortieren

Anfängerfragen zum Programmieren mit PureBasic.
Micro
Beiträge: 59
Registriert: 28.12.2006 17:44
Computerausstattung: Intel 10850K, 16GB RAM
div. andere Rechner...
Wohnort: Nordkirchen

Verzeichnis auslesen und nach Datum sortieren

Beitrag 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
PB 5.73 LTS - Win 11 Pro / 64Bit
Benutzeravatar
Sunny
Beiträge: 290
Registriert: 19.02.2009 06:02

Re: Verzeichnis auslesen und nach Datum sortieren

Beitrag 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
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Verzeichnis auslesen und nach Datum sortieren

Beitrag 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())
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Micro
Beiträge: 59
Registriert: 28.12.2006 17:44
Computerausstattung: Intel 10850K, 16GB RAM
div. andere Rechner...
Wohnort: Nordkirchen

Re: Verzeichnis auslesen und nach Datum sortieren

Beitrag 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
PB 5.73 LTS - Win 11 Pro / 64Bit
Antworten