Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi DeleteFile löscht gewünschte Datei nicht (https://www.delphipraxis.net/158825-deletefile-loescht-gewuenschte-datei-nicht.html)

Metallicwar 4. Mär 2011 12:33

DeleteFile löscht gewünschte Datei nicht
 
Hallo, wie der Titel schon sagt, wird die gewünschte Datei nicht gelöscht, könnt ihr mir mal bitte sagen wieso?
Delphi-Quellcode:
procedure TfrmBankenDownload.ZIPAusführen;
var
  sExePfad, sZIPPfad: String;
begin
  sZIPPfad := ExtractFilePath(ParamStr(0))+'Bankdaten.zip';
  TRY
    ftpDateiDownload.Get('Bankdaten.zip',sZIPPfad, true);
  EXCEPT
    on E: Exception do
    ShowMessage('Beim Download der ZIP Datei ist ein Fehler aufgetreten.' + sLineBreak +
                'Exception class name = '+E.ClassName + sLineBreak +
                'Exception message = '+E.Message);
  END;
  TRY
    begin
      sExePfad := ExtractFilePath(Application.ExeName);
      AbZIPEntpacken.FileName := sZIPPfad;
      AbZIPEntpacken.BaseDirectory := (sExePfad+'Bankdaten');
      AbZIPEntpacken.ExtractFiles('*.*');
      Application.ProcessMessages;
      SysUtils.DeleteFile(sZIPPfad); // <------- ZIP Datei wird nicht gelöscht.
    end;
  EXCEPT
    on E: Exception do
    begin
      ShowMessage('Es ist ein Fehler beim Entpacken der ZIP Datei aufgetreten.' + sLineBreak +
                  'Exception class name = '+E.ClassName + sLineBreak +
                  'Exception message = '+E.Message);
    end;
  END;
  AbZIPEntpacken.Free;
end;
Desweiteren erhalte ich, nachdem ich die Anwendung zur Laufzeit ein zweites mal ausführe (Button klicken --> Anweisungen werden ausgeführt, nochmal Button klicken --> selbe Anweisungen nochmal ausführen) eine Zugriffsverletzung in Zeile
Delphi-Quellcode:
AbZIPEntpacken.FileName := sZIPPfad;
Vielleicht kann mir da noch weitergeholfen werden, ohne ein neues Thema zu eröffnen

himitsu 4. Mär 2011 12:35

AW: DeleteFile löscht gewünschte Datei nicht
 
Vermutlich weil AbZIPEntpacken diese noch geöffnet hat?

PS: DeleteFile hat ein Result und kennt GetLastError
PSS: Warum eigentlich einmal Application.ExeName und dann wieder ParamStr(0) ?

Und die Exception:
Du gibst AbZIPEntpacken frei, aber wo erstellst du es?

Metallicwar 4. Mär 2011 12:43

AW: DeleteFile löscht gewünschte Datei nicht
 
Hallo himitsu,
Zitat:

Vermutlich weil AbZIPEntpacken diese noch geöffnet hat?
ich muss dazu sagen, dass die vorhergehenden Anweisungen ausgeführt werden.
Er speichert die Datei im richtigem Verzeichnis und entpackt sie dort auch, nur eben das Löschen der ZIP Datei funktioniert nicht.

Zitat:

PSS: Warum eigentlich einmal Application.ExeName und dann wieder ParamStr(0) ?
ehm habe zu Beginn mit Application.ExeName gearbeitet, ein Kollege hat mir dann ParamStr gezeigt ;)

und dazu:
Zitat:

Und die Exception:
Du gibst AbZIPEntpacken frei, aber wo erstellst du es?
habe das Free entfernt, nun meckert er, nachdem ich erneut den button anklicke, dass der Ordern Bankdaten.zip nicht erstellt werden kann.
Liegt aber vermutlich daran, dass der Ordner bereits existiert, daher möchte ich ihn ja löschen.

wicht 4. Mär 2011 12:47

AW: DeleteFile löscht gewünschte Datei nicht
 
Mach "SysUtils.DeleteFile(sZIPPfad);" nach "AbZIPEntpacken.Free;" ....
Ausserdem den anderen Rat von himi auch beachten. Das AbZIPEntpacken.Create() sollte eigentlich direkt über das zweite "try".

HTH

Metallicwar 4. Mär 2011 12:57

AW: DeleteFile löscht gewünschte Datei nicht
 
also das Löschen funktioniert jetzte.
aber es tritt immer noch der Fehler beim zweiten Klick auf (Zugriffsverletzung)
Ich erzeuge die Komponenten nicht zur Laufzeit, als Zusatzinfo.
Delphi-Quellcode:
AbZIPEntpacken.Create(Self);
verstehe daher nicht, wieso ich meine ZIP Komponente nochmals erzeugen soll?

himitsu 4. Mär 2011 12:59

AW: DeleteFile löscht gewünschte Datei nicht
 
Zitat:

Zitat von Metallicwar (Beitrag 1085863)
habe das Free entfernt, nun meckert er, nachdem ich erneut den button anklicke, dass der Ordern Bankdaten.zip nicht erstellt werden kann.
Liegt aber vermutlich daran, dass der Ordner bereits existiert, daher möchte ich ihn ja löschen.

Es wird nun aus genau dem selben Grund gemeckert, weswegen die Datei vorher auch nicht gelöscht werden konnte.
> Du hast über .FileName dem AbZIPEntpacken gesagt, es soll diese Datei öffnen/verwenden und das macht es auch, bis du was Anderes sagst.

Hast du dir mal das Result, GetLastError und SysErrorMessage angesehn?


Zitat:

Delphi-Quellcode:
AbZIPEntpacken.Create(Self);

Wie erzeugt man Objekte?
Delphi-Quellcode:
AbZIPEntpacken := TAbZIPEntpacken.Create(Self);
.

Und wenn du es freigibst, dann ist es weg, also neu erstellen, aber wenn du es manuell erstellst, dann darfst du nicht die Komponente auf die Form legen,
also nicht automatisch von der VCL erstellen lassen, wärend sie die Form erstellt.

Bjoerk 4. Mär 2011 13:12

AW: DeleteFile löscht gewünschte Datei nicht
 
Kann sein, daß dein Antivierenprogramm die Datei noch nicht freigibt.
Auf jeden Fall mal das free vor dem delete probieren.
Statt des Application.ProcessMessages mal ein sleep(1) versuchen (zwischen free und delete).

Hast du AbZIPEntpacken:=TZipDingens.Create irgendwo stehen ?

Assarbad 4. Mär 2011 13:16

AW: DeleteFile löscht gewünschte Datei nicht
 
Zitat:

Zitat von Bjoerk (Beitrag 1085871)
Kann sein, daß dein Antivierenprogramm die Datei noch nicht freigibt.

Sehr unwahrscheinlich. Der Scan ist üblicherweise abgeschlossen sobald die Datei erfolgreich geöffnet ist.

Ansonsten empfehle ich MSDN-Library durchsuchenMoveFileEx mit MOVEFILE_DELAY_UNTIL_REBOOT.

himitsu 4. Mär 2011 13:21

AW: DeleteFile löscht gewünschte Datei nicht
 
Zitat:

Zitat von Assarbad (Beitrag 1085872)
Ansonsten empfehle ich MSDN-Library durchsuchenMoveFileEx mit MOVEFILE_DELAY_UNTIL_REBOOT.

War das nicht das, wofür man Adminrechte benötigt?

PS: Der Schuldige ist nicht der Virenscanner oder Sonstwer, sondern AbZIPEntpacken.

Metallicwar 4. Mär 2011 13:27

AW: DeleteFile löscht gewünschte Datei nicht
 
Zitat:

Zitat von Bjoerk (Beitrag 1085871)
Kann sein, daß dein Antivierenprogramm die Datei noch nicht freigibt.
Auf jeden Fall mal das free vor dem delete probieren.
Statt des Application.ProcessMessages mal ein sleep(1) versuchen (zwischen free und delete).

Hast du AbZIPEntpacken:=TZipDingens.Create irgendwo stehen ?

Das mit dem Antivirenprogramm bezweifle ich.
das mit dem sleep werd ich mal probieren.

TZipDingens.Create hab ich nirgends stehen, habe doch erwähnt dass ich die Komponente nicht zur Laufzeit erzeuge.


Zitat:

Zitat von Metallicwar:
habe das Free entfernt, nun meckert er, nachdem ich erneut den button anklicke, dass der Ordern Bankdaten.zip nicht erstellt werden kann.


Liegt aber vermutlich daran, dass der Ordner bereits existiert, daher möchte ich ihn ja löschen.
Es wird nun aus genau dem selben Grund gemeckert, weswegen die Datei vorher auch nicht gelöscht werden konnte.
> Du hast über .FileName dem AbZIPEntpacken gesagt, es soll diese Datei öffnen/verwenden und das macht es auch, bis du was Anderes sagst.

Hast du dir mal das Result, GetLastError und SysErrorMessage angesehn?


Zitat:
AbZIPEntpacken.Create(Self);
Wie erzeugt man Objekte?
AbZIPEntpacken := TAbZIPEntpacken.Create(Self); .

Und wenn du es freigibst, dann ist es weg, also neu erstellen, aber wenn du es manuell erstellst, dann darfst du nicht die Komponente auf die Form legen,
also nicht automatisch von der VCL erstellen lassen, wärend sie die Form erstellt.
ok, werd die Komponente mal zur Laufzeit erzeugen, und P.s ja ich weis wie man Objekte erzeugt :)

das mit GetLastError muss ich mal schaun wie's funktioniert. F1 sollte weiterhelfen ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:12 Uhr.
Seite 1 von 3  1 23      

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