AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Dateien löschen

Ein Thema von blauglaser · begonnen am 4. Feb 2006 · letzter Beitrag vom 6. Feb 2006
Antwort Antwort
Seite 1 von 2  1 2      
blauglaser
(Gast)

n/a Beiträge
 
#1

Dateien löschen

  Alt 4. Feb 2006, 16:42
Hallo zusammen,
Anfänger braucht wieder Hilfe es handelt sich darum Dateien zu löschen die ein bestimtes Datum haben.
Das zu vergleichende Datum wird in 3 Edit Felder eingegeben

Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var
  MyYear, MyMonth, MyDay :integer;
  MyDate: TDateTime;
 
begin
MyYear := StrToInt(Edit3.Text);
MyMonth := StrToInt(Edit4.Text);
MyDay := StrToInt (Edit5.Text);
MyDate := EncodeDate(MyYear,MyMonth,MyDay);
if
//Wie kann ich hier das Datum der Dateien mit dem eingegebenen Datum verleichen
then
               begin
                        DeleteFile(ListBox1.Items.strings[0]);//Wie kann man hier dann alle Dateien löschen und nicht nur eine
               end;

end;
Zuerst wird mit FindFirst und FindNext nach Dateien gesucht diese werden dann an eine Listbox übergeben wie kann ich jetzt das Dateidatum der Dateien in der Listbox ermitteln und mit dem Datum vergleichen dass ich in die Editfelder eingegeben habe es sollen daraufhin alle Dateien mit Delete gelöscht werden deren Datum älter ist als das eingegebene.

Ein kleines Beispiel wäre toll.

Gruss
Ralf

[edit=Christian Seehase]Delphi-Tags gesetzt. Bitte künftig selber machen. Danke. Mfg, Christian Seehase[/edit]
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Dateien löschen

  Alt 4. Feb 2006, 17:04
Hallo Ralf,

wenn du die Dateien mit FindFirst() und seinen Verwandten anhand einer Namensangabe aus dem Dateisystem angelst, dann erhältst du als Beigabe die timestamps in der Struktur SearchRec.FindData. Die Zeiten kannst du dann mit FileDateToDateTime() in das Delphi-Format umwandeln und dann mit beliebigen TDateTime-Werten vergleichen. Bei Datumsvergleichen bedenke, dass du nur den ganzzahligen Anteil von TDateTime-Werten berücksichtigen darfst.

Wenn du nur anhand eines Dateinamens auf das Datum der Datei zugreifen möchtest, dann hilft dir FileAge() weiter. Auch hier muss FileDateToDateTime() nachgeschaltet werden.

Wenn du mehrere Dateien löschen willst, deren Namen in deiner ListBox vermerkt sind, dann kannst du eine Schleife verwenden:

Delphi-Quellcode:
with ListBox do
  for i := 0 to Pred(Items.Count) do
    DeleteFile(Items[i]);
Grüße vom marabu
  Mit Zitat antworten Zitat
blauglaser
(Gast)

n/a Beiträge
 
#3

Re: Dateien löschen

  Alt 4. Feb 2006, 20:15
Hallo,
irgendwas mach ich total falsch kann mir jemand weiterhelefen.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);

Var
path, Mask :String;
MyYear,MyMonth,MyDay:integer;
Datefile :String;
MyAge,FilDat,FilDat1 :TdateTime;


begin
path := Edit1.text;
Mask := Edit2.text;
MyYear := StrToInt (Edit3.Text);
MyMonth := StrToInt (Edit4.Text);
MyDay := StrToInt (Edit5.Text);
MyAge := EncodeDate(myYear, myMonth, Myday);
Datefile := FindFiles (path, Mask, True);//hier wir aus FindFirst und FindNext übergeben
FilDat := FileAge(Datefile);
if Fildat = MyAge
//if Date FileDateToDateTime (FileAge (Datefile))= MyAge Then
//if (Date(FileDateToDateTime(Datefile)) = MyAge)
then
               begin
                        DeleteFile(Datefile);
               end;



end;
Bis Datefile läuft alles die Datei wird an Datefie übergeben aber das mit dem Datum vergleichen kapier ich nicht.

Gruss und Danke
Ralf

[edit=Christian Seehase]Delphi-Tags gesetzt. Bitte künftig selber machen. Danke. Mfg, Christian Seehase[/edit]
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Dateien löschen

  Alt 4. Feb 2006, 22:07
Hallo Ralf,

wenn du deinen Code im Beitrag mit [ delphi] und [ /delphi] (ohne die Leerzeichen) einrahmst, dann sieht er viel besser aus. Oder selektiere ihn und klicke auf den Button Delphi-Code in der Werkzeugleiste des Beitragseditors.

Im Anhang habe ich dir eine kleine Demo gebastelt, die dir zeigt, wie du das Datum einer Datei mit FileAge() besorgst und mit vorgegebenen Datumswerten vergleichst. In der ListBox werden alle Dateien markiert, die zwischen den ausgewählten Datumswerten (inklusiv) liegen.

In deinem Code vermute ich einen Fehler bei FindFiles() - eventuell wird kein String zurückgegeben, sondern irgendeine Liste.

Freundliche Grüße vom marabu
Angehängte Dateien
Dateityp: zip filedate_148.zip (2,4 KB, 18x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Dateien löschen

  Alt 4. Feb 2006, 22:48
ich hab die Vermutung das bei ihm der Vergleich des Datums fehl schlecht. Er vergleicht die Datumswerte direkt und nicht nur den Teil vor dem Komma oder mit der entsprechenden Funktion. Da aber 3.5 nicht unbedingt 3.5 ist (wenn es in zwei variablen verglichen wird) schlägt das ganze fehl.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
blauglaser
(Gast)

n/a Beiträge
 
#6

Re: Dateien löschen

  Alt 5. Feb 2006, 11:22
Hallo zusammen,
also ein Stück weiter bin ich gekommen das löschen der Datei wird nicht gleich übersprungen aber es kommt die Meldung "ungültiges Argument in Datumscodierung" aus FindFiles wir z.B. "test.txt" an die Variable übergeben dann wandle ich die Variable mit
Delphi-Quellcode:
Datefile := FindFiles (path, Mask, True);
FilDat := (FileDateToDateTime(FileAge(Datefile)));
um MyAge ist ja vom Typ TDateTime dann will ich mit:
if (FilDat <= MyAge) vergleichen ob FilDat kleiner oder gleich MyAge ist wen ja
Delphi-Quellcode:
then
fi:=DateTimeToStr(FilDat);
begin
DeleteFile(fi);
end;
soll die Datei gelöscht werden.
Das mit der Listbox habe ich mal ganz rausgenommen sonst geht mir der Überblick verloren (wenn es nicht schon so weit ist)

Gruss und einen schönen kalten Sonntag
Ralf
  Mit Zitat antworten Zitat
Waldteufel
(Gast)

n/a Beiträge
 
#7

Re: Dateien löschen

  Alt 5. Feb 2006, 11:38
Hi blauglaser.

Wenn schon, dann so:
Delphi-Quellcode:
Datefile := FindFiles (path, Mask, True);
FilDat := (FileDateToDateTime(FileAge(Datefile)));
if (FilDat <= MyAge) then
begin
  fi := DateTimeToStr(FilDat);
  DeleteFile(fi);
end;
Dein Code löscht nämlich die Datei immer, speichert den richtigen Dateinamen aber nur, wenn FilDat <= MyAge, in fi ab; Ergo -> Wirrwarr.

Schau dir ggf. auch mal das hier an: http://www.dsdt.info/grundlagen/spra...zweigungen.php

[edit: Fipptehler ]
  Mit Zitat antworten Zitat
blauglaser
(Gast)

n/a Beiträge
 
#8

Re: Dateien löschen

  Alt 5. Feb 2006, 11:53
Super Danke,
aber die Fehlermeldung bleibt da ja etwas mit dem Datum falsch ist.

Gruss
Ralf
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Dateien löschen

  Alt 5. Feb 2006, 14:20
bevor das ganze hier noch ewig dauert - hier eine procedure welche dir alle Dateien in eine Liste vom Typ TStrings packt, die vor einem bestimmten Datum das letzte mal geschrieben/geändert wurden.
Delphi-Quellcode:
procedure FindWrittenBeforeDate(AMask: String; ADate: TDateTime; ADest: TStrings);
  function LConfFileTimeToDateTime(const AFileTime: TFileTime): TDateTime;
  var LTime: TSystemTime;
  begin
    FileTimeToSystemTime(AFileTime, LTime);
    with LTime do
      result := EncodeDateTime(wYear, wMonth, wDay, wHour, wMinute, wSecond, wMilliseconds);
  end;
var LSearchRec: TSearchRec;
begin
  ADest.BeginUpdate;
  if FindFirst(AMask, faAnyFile, LSearchRec) = 0 then
  begin
    repeat

      if (LSearchRec.Attr and faDirectory = 0) and
         (Trunc(LConfFileTimeToDateTime(LSearchRec.FindData.ftLastWriteTime)) < Trunc(ADate)) then
          ADest.Add(LSearchRec.Name);
    until FindNext(LSearchRec) <> 0;
  end;
  ADest.EndUpdate;
end;
Beispielaufruf um alle Dateien aus "c:\temp" zu finden die vor dem aktuellen tag das letzte mal geändert wurden.
  FindWrittenBeforeDate('c:\temp\*', Date, Memo1.Lines);
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
blauglaser
(Gast)

n/a Beiträge
 
#10

Re: Dateien löschen

  Alt 5. Feb 2006, 15:17
Danke für die Mühe,
und sorry wußte nicht das es nicht gerne gesehen ist wenn zuviele wahrscheinlich dumme Fragen gestellt werden.


Gruss
Ralf

PS. werde trotzdem versuchen den Fehler in meinem Code zu finden
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:18 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