Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Dateien älter als X Minuten löschen, aber ... (https://www.delphipraxis.net/190292-dateien-aelter-als-x-minuten-loeschen-aber.html)

kuba 20. Sep 2016 19:33

Dateien älter als X Minuten löschen, aber ...
 
Hallo,

ich habe ein Verzeichnis, dem ständig neue Dateien hinzugefügt werden. Einige Dateien möchte ich regelmäßig löschen, aber nicht alle. Wenn eine bestimmte Anzahl Dateien vorhanden ist möchte ich die Ältesten löschen, aber es soll immer eine Mindestmenge vorhanden bleiben.

Beispiel:

Wenn mehr als 100 Dateien vorhanden sind -> die ältesten löschen - bis auf 50 ...

Jemand eine Idee wie das möglichst einfach geht ??

KUBA

Daniel 20. Sep 2016 19:41

AW: Dateien älter als X Minuten löschen, aber ...
 
Windows stellt da eine Art "Event" zu Verfügung - ReadDirectoryChangesW:
https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx

Vielleicht kommt das ja für Dich in Frage, um Änderungen am Verzeichnis mitzubekommen. Mitzählen müsstest Du dann halt selbst und bei Bedarf mittels FindFirst / FindNext / FindClose die Dateien listen und löschen. Es gibt verschiedene Delphi-Adaptionen dieser API, eine z.B. hier:
http://www.osnews.com/story/7376/A_D...ass_For_Delphi

Uwe Raabe 20. Sep 2016 19:43

AW: Dateien älter als X Minuten löschen, aber ...
 
Liste der Dateien mit Name und Datum einlesen, nach Datum sortieren, in einer Schleife in der Liste ab Position 51 löschen.

kuba 20. Sep 2016 19:53

AW: Dateien älter als X Minuten löschen, aber ...
 
Zitat:

Zitat von Daniel (Beitrag 1348215)
Windows stellt da eine Art "Event" zu Verfügung - ReadDirectoryChangesW:
https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx

Vielleicht kommt das ja für Dich in Frage, um Änderungen am Verzeichnis mitzubekommen. Mitzählen müsstest Du dann halt selbst und bei Bedarf mittels FindFirst / FindNext / FindClose die Dateien listen und löschen. Es gibt verschiedene Delphi-Adaptionen dieser API, eine z.B. hier:
http://www.osnews.com/story/7376/A_D...ass_For_Delphi

Vielen Dank, das ist eine Super Idee !
Konkret möchte ich einen Mediaplayer programmieren, bei dem man per Handy App Fotos hochladen kann, die dann in eine Wiedergabeliste aufgenommen werden und abgespielt werden.
Durch die Funktion kam ich gerade auf eine viel bessere Idee, sobald die "100" überschritten werden lösche ich die 50 aus der aktuellen Playlist. Die habe ich in einer Listbox und kann ganz gezielt die Dateien der alten Playlist löschen.

Trotzdem werde ich nochmal den Ansatz verfolgen die Änderungen im Directory auszuwerten ...

kuba 20. Sep 2016 20:02

AW: Dateien älter als X Minuten löschen, aber ...
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1348216)
Liste der Dateien mit Name und Datum einlesen, nach Datum sortieren, in einer Schleife in der Liste ab Position 51 löschen.

Genau das wollte ich eigentlich machen. Ich hab eine JAM Shellbrowser Komponente, damit müsste es mit dem Sortieren nach Datum recht einfach gehen. Ich teste das mal, ist ein Demo dabei ...

kuba 20. Sep 2016 20:15

AW: Dateien älter als X Minuten löschen, aber ...
 
Ich mach es wahrscheinlich so, daß ich die Dateien der "aktuellen" Playlist lösche sobald das Maximum an Dateien überschritten wurde. Würde ich immer 50 übrig lassen könnte es passieren dass 101 Dateien vorhanden sind und Datei 51 gelöscht wird obwohl sie noch nicht in einer Playlist verarbeitet wurde ...

dGeek 20. Sep 2016 20:30

AW: Dateien älter als X Minuten löschen, aber ...
 
Zitat:

obwohl sie noch nicht in einer Playlist verarbeitet wurde ...
Bitet sich hier nicht wunderbar eine ObjectList an, in der man alle Objekte mit sämtlichen Informationen speichert? Besonders aber, ob Objekt X schon verarbeitet wurde oder nicht.

kuba 20. Sep 2016 20:37

AW: Dateien älter als X Minuten löschen, aber ...
 
Ich arbeite mit dem VLC-Player. Leider habe ich noch nicht herausgefunden, wie man mit libvlc dem Player einen Titel hinzufügt ohne den Player zu beenden. Wenn man den VLC-Player mit Kommandozeilenparameter aufruft kann man mehrere Titel als Playlist übergeben. Das sieht etwa so aus:

C:\Temp\KIOSK>"C:\Program Files\VideoLAN\VLC\vlc.exe" file:///C:/Temp/KIOSK/20160913_153024.jpg file:///C:/Temp/KIOSK/20160913_153035.jpg file:///C:/Temp/KIOSK/20160913_153047.jpg file:///C:/Temp/KIOSK/20160913_153120.jpg file:///C:/Temp/KIOSK/20160913_153131.jpg file:///C:/Temp/KIOSK/20160917_180642.jpg file:///C:/Temp/KIOSK/20160917_204202.jpg file:///C:/Temp/KIOSK/20160917_204332.jpg --fullscreen --no-video-title-show --image-duration=5 --key-quit=q --loop

Mit der libvlc habe ich das leider noch nicht geschafft. Einzelne Titel übergebe ich mit "libvlc_media_new_path".

kuba 27. Sep 2016 19:43

AW: Dateien älter als X Minuten löschen, aber ...
 
Hallo,

ich habe in der Entwickler-ecke einen funktionierenden Source Code gefunden, der mich ans Ziel gebracht hat.

Vielleicht hilft es ja auch anderen ...

KUBA


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:29 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz