Announcement

Collapse
No announcement yet.

Wie löscht man bestimmte Dateien??

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Wie löscht man bestimmte Dateien??

    Hallo,

    ich möchte in einem Verzeichnis bestimmte Dateien löschen. Vom Typ: tmp*.*
    Ich dachte mir das es vielleicht so gehen würde:
    var
    FileName : String;
    begin
    FileName := ExtractFilePath(paramstr(0));
    FileName := FileName + ExtractFileName('tmp*.*');
    DeleteFile(FileName);
    end;

    tut es aber nicht. Wieso was mache ich da falsch?
    Und wie kann ich es bewerkstelligen das der Löschvorgang erst einsetzt, nachdem mein Programm geschlossen ist? (Form.close Eigenschaft??)

    mfg
    Stefan

  • #2
    Hi.
    Eine Möglichkeit wäre:

    <pre>
    var
    &nbsp;&nbsp;ds : TSearchRec;
    &nbsp;&nbsp;Res : integer;
    ...
    Res := FindFirst('tmp*.*',faAnyFile,ds);
    while(Res = 0) do
    &nbsp;&nbsp;begin
    &nbsp;&nbsp;&nbsp;&nbsp;if(DeleteFile(ds.Name)) then ; // nur´n Dummy, aber syntaktisch korrekt )
    &nbsp;&nbsp;&nbsp;&nbsp;Res := FindNext(ds);
    &nbsp;&nbsp;end;
    FindClose(ds);
    </pre>

    Dann gäbe es noch die Möglichkeit, die Löschmethode von Windows zu verwenden. (SHFileOperation) Aber die habe ich gerade nicht im Kopf. Die wäre einfacher und ist außerdem quasi im System eingebaut. )

    Und was die FormClose-Sache angeht: Ich glaube, dort wird abgearbeitet das, was beim Schließen des Programms geschehen soll. Das hat aber (IMHO) mit dem tatsächlichen Ende des Programms nichts zu tun. Das kommt erst danach.

    Bitte verbessern, wenn Fehler in meinen Ausführungen sind.
    Ach ja, diese Löschsache mit der Explorermethode reiche ich nach, wenn ich sie finde. Oder ein anderer ist schneller.

    Gruß.
    Mathias

    Comment


    • #3
      Also, hier im Forum sind genug Fundstellen zu <b>SHFileOperation</b>. Laut Andreas Kosch sind´s 43 ).

      Aber ich schätze, ein konkretes Beispiel hilft dir eher weiter. Geht mir jedenfalls so. Infos in allen Ehren, aber manchmal bin ich zu behämmert, da muss ich den Code vor mir sehen. Also:

      <pre>
      uses
      &nbsp;&nbsp;ShellAPI;

      procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
      var
      &nbsp;&nbsp;SHFileOp : TSHFileOpStruct;
      begin
      &nbsp;&nbsp;FillChar(SHFileOp,sizeof(SHFileOp),#0) ;
      &nbsp;&nbsp;SHFileOp.Wnd := self.Handle;
      &nbsp;&nbsp;SHFileOp.wFunc := FO_DELETE;
      &nbsp;&nbsp;SHFileOp.pFrom := pchar(extractfilepath(paramstr(0)) + 'tmp*.*' + #0#0);
      &nbsp;&nbsp;SHFileOp.pTo := nil;
      &nbsp;&nbsp;SHFileOp.fFlags := FOF_NOCONFIRMATION; // wenn du diese Zeile weglässt, fragt Windows ob du löschen willst )
      &nbsp;&nbsp;SHFileOperation(SHFileOp);
      end;
      </pre>

      Ich persönlich bevorzuge diese Methode, weil man weniger Fehler machen kann und eigentlich nur Windows-Funktionen benutzt

      Comment


      • #4
        Hallo Mathias,

        vielen Dank genau das hab ich gesucht und mit hilfe deines Bsp. hab ich es so gar einigermaßen verstanden. Wieso steht zu dem Thema: SHFileOp nichts in der Delphi Hilfe? Wo krieg ich mehr Info´s dazu?

        danke
        Stefa

        Comment


        • #5
          Was den Dank angeht: ich hab´s auch nur abgeschrieben. Von Andreas Kosch, glaube ich. )

          Diese <b>SHFileOperation</b> ist ein bisschen intern im System. Ich weiß ja nicht, welche Delphi-Version du hast (Standard, Pro, Personal). Unter Umständen liegt da ´ne aktuelle Version der Win32-Hilfe bei; da solltest du was dazu finden. Ansonsten gibt´s auch noch dieses Forum hier. ) Ich hab´ auch eine ganze Menge hier lernen können.

          Gruß,
          Mathias

          Comment

          Working...
          X