Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   File löschen und umbenennen geht nicht (https://www.delphipraxis.net/153668-file-loeschen-und-umbenennen-geht-nicht.html)

Störtebeker 18. Aug 2010 22:22

AW: File löschen und umbenennen geht nicht
 
Timer 2 hat ein Intervall von 3500 und er scheint die CheckForPatchFile Prozedur nicht aufzurufen. Beim Click auf den Button keine Reaktion.

Wenn ich Breakpoints setze,

Delphi-Quellcode:
procedure TForm7.CheckForPatchFile;
var
  patchfile, currentfile: string;
begin
  patchfile := ExtractFilePath(Application.ExeName)+'vers_patch.ini';
  currentfile := ExtractFilePath(Application.ExeName)+'vers_aktuell.ini';
  if not FileExists(patchfile) then
    exit;
  deletefile(currentfile);
  renamefile(patchfile, currentfile);
end;
...werden DeleteFile und RenameFile einfach übersprungen, er springt dann auch nach einem weiteren Druck auf F7 sofort zum "end;" von Timer2Timer und dann in die Unit "CostumTimer" hierhin:

Delphi-Quellcode:
procedure TCostumTimer.DoOnTimer;
if Assigned(FOnTimer) then
FOnTimer(Self);
end;


EDIT:
Das Löschen funzt jetzt. Habe aus DeleteFile(currentfile); einfach DeleteFile(PChar(currentfile)); gemacht. Jetzt muss ich nur noch am rename knabbern. Da bekomme ich den Fehlercode = 2.

DeddyH 19. Aug 2010 10:19

AW: File löschen und umbenennen geht nicht
 
Und was heißt Fehlercode 2? http://msdn.microsoft.com/en-us/libr...8VS.85%29.aspx

Störtebeker 19. Aug 2010 10:26

AW: File löschen und umbenennen geht nicht
 
Ja, ich weiß, dass es der Code für "File not found" ist. Aber es wird ja die noch existierende "vers_patch.ini" umbenannt und nicht die "vers_aktuell.ini", die gelöscht wird.

Auch wenn ich bei renamefile(patchfile,...'vers_aktuell.ini') eingebe, bekomme ich diesen Fehler.

DeddyH 19. Aug 2010 10:31

AW: File löschen und umbenennen geht nicht
 
Statt Löschen und Umbenennen kannst Du es auch einmal mit MSDN-Library durchsuchenMoveFileEx versuchen.

[edit]Also etwa so:
Delphi-Quellcode:
procedure TForm7.CheckForPatchFile;
var
  patchfile, currentfile: string;
begin
  patchfile := ExtractFilePath(Application.ExeName)+'vers_patch.ini';
  if FileExists(patchfile) then
    begin
      currentfile := ExtractFilePath(Application.ExeName)+'vers_aktuell.ini';
      if not MoveFileEx(PChar(patchfile),PChar(currentfile),MOVEFILE_REPLACE_EXISTING or MOVEFILE_WRITE_THROUGH) then
        raise Exception.Create(SysErrorMessage(GetLastError));
    end;
end;

Störtebeker 19. Aug 2010 11:21

AW: File löschen und umbenennen geht nicht
 
Oh mein Gott, :wall::wall: Kann ich noch irgendwo meinen Kopf gegenhauen :lol:

Das RenameFile hätte die ganze Zeit funktioniert, wenn ich gleich gesehen hätte, dass
die eigentliche "vers_patch.ini" im Ordner -> "vers__patch.ini" hieß. Und da er ja im Quelltext nach einer "vers_patch.ini" sucht, kann er sie natürlich nicht finden. Da habe ich wohl beim erstellen der Datei einen Unterstrich zu viel eingebaut. :oops:

himitsu 19. Aug 2010 11:44

AW: File löschen und umbenennen geht nicht
 
Drum legt man gerne auch eine Konstante für solche Namen an ... da sind überall die Namen gleich.

DeddyH 19. Aug 2010 12:18

AW: File löschen und umbenennen geht nicht
 
Properties/Funktionen wären aber auch noch eine Möglichkeit, solche Fehler zu vermeiden. Auch hier kann man ja dann Konstanten verwenden.
Delphi-Quellcode:
function PatchFileName: string;
const ININAME = 'vers_patch.ini';
begin
  Result := ExtractFilePath(ParamStr(0)) + ININAME;
end;

function CurrentFileName: string;
const ININAME = 'vers_aktuell.ini';
begin
  Result := ExtractFilePath(ParamStr(0)) + ININAME;
end;

procedure TForm7.CheckForPatchFile;
var
  patchfile, currentfile: string;
begin
  patchfile := PatchFileName;
  if FileExists(patchfile) then
    begin
      currentfile := CurrentFileName;
      if not MoveFileEx(PChar(patchfile),PChar(currentfile),MOVEFILE_REPLACE_EXISTING or MOVEFILE_WRITE_THROUGH) then
        raise Exception.Create(SysErrorMessage(GetLastError));
    end;
end;
Man kann das auch noch weiter treiben und eine weitere Funktion schreiben, die den Pfad zurückgibt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:33 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz