Dateien werden nicht gelöscht..

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
TRojaner2012
Beiträge: 11
Registriert: So 5. Mai 2013, 10:30

Dateien werden nicht gelöscht..

Beitrag von TRojaner2012 »

Hallo,
ich programmiere grade ein Programm, welches meine Downloads (welche älter als zwei Tage sind) automatisch löscht.
Alles funktioniert, bis auf das löschen selber. Es wäre echt nett, wenn ihr mir Helfen könnt :)

Hier habt ihr den Quellcode:

Code: Alles auswählen

unit Unit1;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
  ExtCtrls;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    Label1: TLabel;
    ListBox1: TListBox;
    Timer1: TTimer;
    Timer2: TTimer;
    procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
    procedure FormCloseQuery(Sender: TObject; var CanClose: boolean);
    procedure FormCreate(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure Timer1StartTimer(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure Timer2Timer(Sender: TObject);
  private
    { private declarations }
 
  public
    { public declarations }
  end;
 
var
  Form1: TForm1;
  n: Integer;
 
implementation
 
{$R *.lfm}
 
{ TForm1 }
 
procedure TForm1.FormShow(Sender: TObject);
begin
end;
 
procedure TForm1.Timer1StartTimer(Sender: TObject);
begin
  Form1.Visible:=false;
end;
 
procedure Anzeigen();
var
     SR: TSearchRec;
     dir: String;
     Anzahl: Integer;
 begin
   Form1.Visible:= true;
   Form1.Timer1.Enabled:= false;
   Form1.Listbox1.Clear;
   Anzahl:=0;
    if DirectoryExists('C:\Windows\Temp\Download')= false then
      begin
      CreateDir('C:\Windows\Temp\Download');
      end;
 
    if DirectoryExists('C:\Windows\Temp\Download')= true then
     begin
       dir := ('C:\Windows\Temp\Download\');
         if FindFirst(dir+'
*.*',faAnyFile,SR) = 0 then
           begin
             repeat
               if (sr.name='
.') or  (sr.name='..')
                 then continue
               else
                 begin
                   If(Now-FileDateToDateTime(sr.Time)>2) then
                     begin
                       Form1.ListBox1.Items.add(sr.name + '
     ' + DateToStr(sr.Time)+'--> Wird gelöscht!');
                     end
                   else
                   begin
                    Form1.ListBox1.Items.add(sr.name + '
     ' + DateToStr(sr.Time)+'-->Bleibt erhalten!');
                   end;
                 end;
               Anzahl:= Anzahl+1;
              until FindNext(SR)<>0;
             FindClose(SR);
           end;
          Form1.Timer2.Enabled:=true;
 
          if Anzahl*2<=10
          then n:= 10
          else n:= Anzahl*2 ;
 
     end;
   end;
 
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Anzeigen();
end;
 
procedure TForm1.Timer2Timer(Sender: TObject);
var
     SR: TSearchRec;
     dir: String;
begin
    n:= n-1 ;
    Label1.caption:= '
Verbleibende Zeit:'+ ' ' + InttoStr(n) + ' Sekunden';
    if n=0 then
      begin
        Timer2.enabled:=false;
        Form1.Label1.caption:='
';
 
        if DirectoryExists('
C:\Windows\Temp\Download')= false then
      begin
      CreateDir('
C:\Windows\Temp\Download');
      end;
 
    if DirectoryExists('
C:\Windows\\Temp\Download')= true then
     begin
       dir := ('
c:\Windows\Temp\Download\');
         if FindFirst(dir+'
*.*',faAnyFile,SR) = 0 then
           begin
             repeat
               if (sr.name='
.') or  (sr.name='..')
                 then continue;
               If(Now-FileDateToDateTime(sr.Time)<2) then //Absicht, damit ich nicht warten muss und testen kann ;D
                 begin
                   if DeleteFile(sr.name) then
                        begin
                           ShowMessage(dir+sr.name+'
deleted OK');
                           Form1.Listbox1.Items.add(dir+sr.name + '
wurde erfolgreich gelöscht!');
                         end
                        else
                         begin
                          ShowMessage(dir+sr.name+'
not deleted');
                          Form1.ListBox1.Items.add(dir+sr.name + '
konnte nicht gelöscht werden!');
                         end;
                 end
               else continue;
 
             until FindNext(SR)<>0;
             FindClose(SR);
             Form1.Visible:=false;
             Form1.Timer1.Enabled:=true;
           end;
      end;
      end;
 
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  Timer1.enabled:=true;
  Timer2.Enabled:=false;
  Form1.Visible:=false;
end;
 
 
procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
  ShowMessage('
Zugriff Verweigert!');
end;
 
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: boolean);
begin
  Canclose := false;                     //Damit man nicht schließen kann!
  ShowMessage('
Zugriff Verweigert!');
end;
 
 
 
end.
                                                                                                                                                                                                                                                                           
Habe jetzt grade keine Ahnung warum das alle rot ist, tut aber auch nix zur Sache ;D

Grüße

Trotro

Namos

Re: Dateien werden nicht gelöscht..

Beitrag von Namos »

Hallo der Fehler liegt wohl hier :

Code: Alles auswählen

 
If(Now-FileDateToDateTime(sr.Time)>2) then
                 begin         
                   if DeleteFile(sr.name) then //Fehler
                        begin
                           //ShowMessage(dir+sr.name+' deleted OK');
                           Form1.Listbox1.Items.add(dir+sr.name + ' wurde erfolgreich gelöscht!');
                         end
                    else
                         begin
                          //ShowMessage(dir+sr.name+' not deleted');
                          Form1.ListBox1.Items.add(dir+sr.name + ' konnte nicht gelöscht werden!');
                         end;}
                 end  ;


hier sollte

Code: Alles auswählen

 DeleteFile(dir+sr.name); 
hin, sonst wird ja versucht im Ordner des Programms die Dateien zu löschen...

Außerdem habe ich noch folgendes ersetzt

Code: Alles auswählen

 dir := ('c:\Windows\Temp\Download'); 
mit dir := ('c:\Windows\Temp\Download\');

und

Code: Alles auswählen

if FindFirst(dir+'*.*',faAnyFile,SR) = 0 then  

mit

Code: Alles auswählen

 if FindFirst(dir+'*.*',faAnyFile and not faDirectory,SR) = 0 then   

aber das hängt davon ab ob du Ordner berücksichtigen willst...

Antrepolit
Beiträge: 340
Registriert: Di 12. Sep 2006, 08:57
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Kontaktdaten:

Re: Dateien werden nicht gelöscht..

Beitrag von Antrepolit »

Downloads gehören eigentlich nicht in den Windows-Ordner (C:\Windows\Temp\Download). Wenn du als User dorthin Downloaden kannst, können Viren ebenso einfach dort rumpfuschen. Das ist sehr riskant. Downloads sind Benutzerdateien und gehören unter C:\users\... . Unter Win7 bzw. Win8 wird dein Programm Admin-Rechte benötigen.
Grüße, Antrepolit

care only if your os is really burning

TRojaner2012
Beiträge: 11
Registriert: So 5. Mai 2013, 10:30

Re: Dateien werden nicht gelöscht..

Beitrag von TRojaner2012 »

Hi,
Danke für die schnellen Antworten :)
Also das klappt jetzt, und ich habe den Pfad geändert!
Wenn mir noch jemand zeigen könnte, wie das ding jetzt in den Autostart kommt (also mit Registry) wäre ich echt glücklich :)
Habe das einmal versucht, aber dann war das Programm hin :(

Wie ist das Ordner berücksichtigen gemeint? Also das er Unterordner ignoriert?

Danke & Grüße

Trotro

mark332
Beiträge: 202
Registriert: Do 16. Mai 2013, 13:49
OS, Lazarus, FPC: Windows 10 H.P. (x64) / Ubuntu 14.04.X
CPU-Target: AMD Octacore 4.0GHz

Re: Dateien werden nicht gelöscht..

Beitrag von mark332 »

Einfach in den "Autostart"-Ordner im Startmenü packen ;)
Ansonsten steht auf der seite http://www.delphi-treff.de/tipps/applik ... schreiben/ wie man dateien in den Autostart schreibt.

MfG mark332
------------------------------------------------------------
Warum gibt es hier eigentlich kein [SPOILER][/SPOILER] ?

Antworten