Dateien automatisch löschen

Für Fragen von Einsteigern und Programmieranfängern...
pilo
Beiträge: 9
Registriert: Mo 31. Okt 2016, 11:49

Dateien automatisch löschen

Beitrag von pilo »

Hallo,

ich bin Pascal-Programmieranfänger und habe eine Frage.
Wenn ich den Schalter (ToggleBox) auf "An" schalte, dann sollen in einem Abstand von 10 Minuten in dem Ordner 'C:\Users\Benutzer\Documets\Temp' alle darin befindlichen Dateien gelöscht werden.
Wie kann man das realisieren?

Bild Programm.JPG
Bild Programm.JPG (13.05 KiB) 2409 mal betrachtet

Code: Alles auswählen

unit Loeschen;
{$mode objfpc}{$H+}
interface
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
type
  { TForm1 }
  TForm1 = class(TForm)
    Schalter: TToggleBox;
    procedure SchalterChange(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;
var
  Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.SchalterChange(Sender: TObject);
begin
  if Schalter.Caption = 'An' then
    Schalter.Caption := 'Aus'
  else
    Schalter.Caption := 'An';
end;
end.   

compmgmt
Beiträge: 351
Registriert: Mi 25. Nov 2015, 17:06
OS, Lazarus, FPC: Win 10 Pro | Lazarus 1.8.2 | FPC 3.0.4
CPU-Target: i386 + x86_64
Wohnort: in der Nähe von Stuttgart
Kontaktdaten:

Re: Dateien automatisch löschen

Beitrag von compmgmt »

Nutze lieber die Eigenschaft "Checked". Wenn diese auf True steht, ist die ToggleBox aktiviert.

Code: Alles auswählen

procedure TForm1.SchalterChange(Sender: TObject);
begin
  Timer1.Enabled := Schalter.Checked;
  { Die Zeile oberhalb macht nichts anderes als das folgende, ist aber eleganter:
  if Schalter.Checked then
    Timer1.Enabled := true;
  else
    Timer1.Enabled := false; }

end;
 

Erstelle nun einen Timer namens "Timer1", setzte den "Interval" auf 600000 (= 600 Sekunden) und füge das Ereignis "OnTimer" hinzu. Das sollte so aussehen:

Code: Alles auswählen

 
procedure TForm1.Timer1OnTimer(Sender: TObject);
begin
  DeleteDirectory( 'C:\Users\Benutzer\Documets\Temp', true); // das true hinten sorgt dafür, dass nur der Inhalt und nicht der Ordner selbst gelöscht wird.
  // Falls du den Temp-Ordner von Windows löschen möchtest nimm "GetEnvironmentVariable('temp')" statt "'C:\Users\Benutzer\Documets\Temp'"
end;
 

Code: Alles auswählen

InitiateSystemShutdownExA(nil, nil, 0, true, false, $0005000F);
Have fun with this snippet ;)

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2640
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Dateien automatisch löschen

Beitrag von m.fuchs »

Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

pilo
Beiträge: 9
Registriert: Mo 31. Okt 2016, 11:49

Re: Dateien automatisch löschen

Beitrag von pilo »

Danke für die superschnellen Antworten.
Mache mich gleich ans Werk und berichte dann hier wieder.

pilo
Beiträge: 9
Registriert: Mo 31. Okt 2016, 11:49

Re: Dateien automatisch löschen

Beitrag von pilo »

Stand des Programms:

Bild2 Programm.JPG
Bild2 Programm.JPG (15.52 KiB) 2386 mal betrachtet

Code: Alles auswählen

unit Loeschen;
{$mode objfpc}{$H+}
interface
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls;
type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Schalter: TToggleBox;
    Timer1: TTimer;
    procedure SchalterChange(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
   end;
var
  Form1: TForm1;
implementation
{$R *.lfm}
procedure TForm1.SchalterChange(Sender: TObject);
begin
  Timer1.Enabled:=Schalter.Checked;
  if Schalter.Caption = 'An' then
    Schalter.Caption := 'Aus'
  else
    Schalter.Caption := 'An';
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Timer1.Interval:=StrToInt(Edit1.Text)*1000;
  DeleteDirectory('C:\Users\Benutzer\AppData\Local\Microsoft\Windows\Temporary Internet Files', true);
  DeleteDirectory('C:\Users\Benutzer\AppData\Roaming\Microsoft\Windows\Cookies', true);
end;
end.


@compmgnt
natürlich will ich temp-Ordner von Windows leeren, wollte nur erst mal probieren bevor ich im System rumwurschtel, der Versuch den Ordner 'C:\Users\Benutzer\Documets\Temp' zu leeren fuktioniert, aber die im Quelltext angegebenen Ordner werden nicht geleert.
Ich habe es auch mit "GetEnvironmentVariable("temp')" versucht, auch kein Erfolg.

Kleine Schönheitsfehler gibts auch noch, die sind aber nicht so wichtig.
- wie kann man das Fenster fix machen, damit es in der Größe nicht veränderbar ist?
- bei Programmstart bekommt Edit1 den Focus, kann man das verändern?
- schon während der Eingabe in Edit wird der Wert im Timer verwendet (wenn man z.B. 600 eingeben will, dann wird schon die 6 genommen wenn man die zwei Nullen noch nicht eingegeben hat). Geht das irgendwie anders, also erst nach drücken der Enter-Taste?
- welche uses kann man entfernen die in diesem Programm nicht benötigt werden?

das sind aber nur Nebensächlichkeiten, wichtig wäre das leeren der beiden Ordner.

compmgmt
Beiträge: 351
Registriert: Mi 25. Nov 2015, 17:06
OS, Lazarus, FPC: Win 10 Pro | Lazarus 1.8.2 | FPC 3.0.4
CPU-Target: i386 + x86_64
Wohnort: in der Nähe von Stuttgart
Kontaktdaten:

Re: Dateien automatisch löschen

Beitrag von compmgmt »

Wenn dein Benutzer "Benutzer" heißt, sollte es gehen. Ansonsten verstehe ich das nicht. Bei mir funktioniert DeleteDirectory immer...

Code: Alles auswählen

InitiateSystemShutdownExA(nil, nil, 0, true, false, $0005000F);
Have fun with this snippet ;)

pilo
Beiträge: 9
Registriert: Mo 31. Okt 2016, 11:49

Re: Dateien automatisch löschen

Beitrag von pilo »

habe nochmal alles überprüft, im Ordner Dokumente funktionierts, aber in den Windowsordnern nicht. Sollte demnach sowas wie eine Berechtigungsfrage sein.
Bin als Admi angemeldet, daran kanns nicht liegen.

pilo
Beiträge: 9
Registriert: Mo 31. Okt 2016, 11:49

Re: Dateien automatisch löschen

Beitrag von pilo »

ok, bin ein Stück weiter.
In den Ordnern befindet sich auch noch eine Datei "index.dat" (von Windows), die sich auch nicht händisch löschen lässt. Ich nehme an, dass das löschen fehlschlägt weil der Löschbefehl dort schon stolpert und den Löschvorgang abbricht.
Mit dem Befehl "DeleteFile('C:\Users\Benutzer\AppData\Roaming\Microsoft\Windows\Cookies\*.txt);" wird die von mir gewünschte Datei problemlos gelöscht.

In "Temporary Internet Files" liegt das Problem vor, dass die zu löschende Datei in einem Unterordner, dessen Name zufällig erzeugt wird, steckt.
Wie kommt man auf den Namen des Ordners, kann da jemand helfen?

compmgmt
Beiträge: 351
Registriert: Mi 25. Nov 2015, 17:06
OS, Lazarus, FPC: Win 10 Pro | Lazarus 1.8.2 | FPC 3.0.4
CPU-Target: i386 + x86_64
Wohnort: in der Nähe von Stuttgart
Kontaktdaten:

Re: Dateien automatisch löschen

Beitrag von compmgmt »

FindAllDirectories ist das Stichwort ;)

Code: Alles auswählen

InitiateSystemShutdownExA(nil, nil, 0, true, false, $0005000F);
Have fun with this snippet ;)

pilo
Beiträge: 9
Registriert: Mo 31. Okt 2016, 11:49

Re: Dateien automatisch löschen

Beitrag von pilo »

habe es jetzt mit diesem Code versucht, aber es funktioniert nicht.

Code: Alles auswählen

var D:TSearchRec;
begin
  if FindFirst('C:\Users\Benutzer\Documents\temp',faDirectory,D)=0 then
    begin
      repeat
        DeleteFile('C:\Users\Benutzer\Documents\temp\'+D.Name+'\*.htm');
      until FindNext(D)<>0;
      FindClose(D);
    end;
end.


Nachtrag: im Original ist "\" nach temp drin.

var D:TSearchRec;
begin
if FindFirst('C:\Users\Benutzer\Documents\temp',faDirectory,D)=0 then
begin
repeat
DeleteFile('C:\Users\Benutzer\Documents\temp\'+D.Name+'\*.htm');
until FindNext(D)<>0;
FindClose(D);
end;
end.

weiss nicht warum er das weggelassen hat

pilo
Beiträge: 9
Registriert: Mo 31. Okt 2016, 11:49

Re: Dateien automatisch löschen

Beitrag von pilo »

also der Unterordner wird gefunden, aber der Löschbefehl klappt nicht.

DeleteFile('C:\Users\Benutzer\Documents\temp\'+D.Name+'\*.htm');

in D.Name steht der richtige Ordner drin.
versteh ich nicht.

compmgmt
Beiträge: 351
Registriert: Mi 25. Nov 2015, 17:06
OS, Lazarus, FPC: Win 10 Pro | Lazarus 1.8.2 | FPC 3.0.4
CPU-Target: i386 + x86_64
Wohnort: in der Nähe von Stuttgart
Kontaktdaten:

Re: Dateien automatisch löschen

Beitrag von compmgmt »

Ordner <> Datei. Du musst DeleteDirectory nutzen.

Code: Alles auswählen

InitiateSystemShutdownExA(nil, nil, 0, true, false, $0005000F);
Have fun with this snippet ;)

pilo
Beiträge: 9
Registriert: Mo 31. Okt 2016, 11:49

Re: Dateien automatisch löschen

Beitrag von pilo »

ich geb auf!

100 Varianten ausprobiert, DeleteFile, DeleteDirectory, mit und ohne "\", usw.
Beim "Temporary Internet File"-Ordner zeigt er im WindowsExplorer 2 Dateien an, wenn ich mit CCleaner analysiere ist da auf einmal ein Unterordner "Content.IE5", die 2 Dateien werden da nicht angezeigt, und nichts davon lässt sich löschen.
Selbst im Cookies-Ordner, wird die Datei nur bei ersten Programmdurchlauf gelöscht, wenn sie später wieder angelgt wird löscht das Programm dann nicht mehr.
Keine Ahnung was da los ist.

wp_xyz
Beiträge: 4889
Registriert: Fr 8. Apr 2011, 09:01

Re: Dateien automatisch löschen

Beitrag von wp_xyz »

Dateien, die gerade geöffnet sind, kannst du nicht löschen. Da hilft auch dein "Admi" nicht. Wenn das ginge, würdest du ja alle möglichen Programme zum Absturz bringen, weil sie ihre ausgelagerten Arbeitsdaten nicht mehr finden. Aber bei der nächsten Löschrunde in 10 min sind sie ja vielleicht geschlossen, und wenn sie wirklich von ihrer Anwendung nicht gelöscht wurden, werde sie werden dann halt von dir mit Verspätung gelöscht. Wo ist das Problem, um die Flinte schon ins Korn zu werfen?

pilo
Beiträge: 9
Registriert: Mo 31. Okt 2016, 11:49

Re: Dateien automatisch löschen

Beitrag von pilo »

wp_xyz hat geschrieben:Dateien, die gerade geöffnet sind, kannst du nicht löschen.


Ich lade mir über ein anderes Programm eine WebSeite herunter und speichere diese als .txt. Beim Download (auch ohne Browser) wird eine Cookie-Datei und 2 Dateien unter "Temporary Internet File" erstellt. Wie können diese Dateien denn gerade geöffnet sein, wenn ich nur in dem heruntergeladenen Textfile lese.

Wenn diese 3 Dateien nicht vor dem nächsten Download gelöscht sind, bekomme ich keine aktuellen Daten von der Website.
CCleaner löscht diese Dateien zu jeder Zeit, also gehen muss es irgendwie, ob mit fpc bleibt offen.

wp_xyz hat geschrieben:Wo ist das Problem, um die Flinte schon ins Korn zu werfen?


hast Du denn eine Lösung für das dargelegte Problem?

Antworten