AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

File löschen und umbenennen geht nicht

Ein Thema von Störtebeker · begonnen am 12. Aug 2010 · letzter Beitrag vom 19. Aug 2010
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Störtebeker
Störtebeker

Registriert seit: 9. Jul 2007
398 Beiträge
 
#1

File löschen und umbenennen geht nicht

  Alt 12. Aug 2010, 00:41
Hi,

nach langer Zeit plagt mich mal wieder ein Problem, bei dem ich zur Zeit etwas auf dem Schlauch stehe, weil es einfach nicht funktioniert. Womöglich ist die Lösung auch viel einfacher, als ich momentan glaube. Es geht darum, dass ich mir eine Art Launcher gebastelt habe, der unter anderem auch die aktuelle Programmversion anzeigt, die ich in einer .Ini vermerkt habe. Nun ist es so, dass zum Beispiel mit einem Update auch eine neue Versionsnummer kommt, die ich in einer .Ini dem gedownloadeten Update gerne mitgeben möchte:

Folgender Codeausschnitt:

Delphi-Quellcode:
procedure TForm7.FormShow(Sender: TObject);
 var Ini : TIniFile;
 begin
  if FileExists(ExtractFilePath(Application.ExeName)+'vers_patch.ini') then begin
   Ini:=TIniFile.Create(ExtractFilePath(ParamStr(0))+'vers__patch.ini');
  try
     deletefile(ExtractFilePath(Application.ExeName)+'vers_aktuell.ini');
     renamefile(ExtractFilePath(Application.ExeName)+'vers_patch.ini',(ExtractFilePath(Application.ExeName)+'vers_aktuell.ini'));
  finally
     FreeAndNil(Ini);
  end;
 end;
Wie wahrscheinlich aus dem Codeschnipsel ersichtlich soll, sofern es eine Ini "vers_patch" gibt, die Ini "vers_aktuell" gelöscht werden und die "vers_patch" Ini dann in "vers_aktuell" umbenannt werden. Wenn ich jedoch das Programm starte, ändert sich nichts. Die Versionsnummer ist immernoch die alte und die Datei "vers_patch.ini" ist auch noch vorhanden.

Abgefragt wird das ganze etwas weiter unten im Text:
Delphi-Quellcode:
var Ini : TIniFile;
begin
  if FileExists(ExtractFilePath(Application.ExeName)+'vers_aktuell.ini') then begin
  Ini:=TIniFile.Create(ExtractFilePath(ParamStr(0))+'vers_aktuell.ini');
   try
    Image7.Width:=240;
    Label9.Caption:=Ini.ReadString('verstitle','title',''); //Auslesen und Anzeigen der Versionsnummer
  finally
    FreeAndNil(Ini);
  end;
end;
Wäre sehr dankbar, wenn ihr mir ein bisschen auf die Sprünge helfen könntet, was ich verändern könnte, um das Problem zu lösen.
"And he piled upon the whale´s white hump - a sum of all the rage and hate felt by his whole race.
If his chest had been a cannon, he would have shot his heart upon it."
  Mit Zitat antworten Zitat
blauweiss

Registriert seit: 19. Jun 2007
142 Beiträge
 
#2

AW: File löschen und umbenennen geht nicht

  Alt 12. Aug 2010, 03:23
Hallo Störtebeker,

warum öffnest Du die Ini-Datei ohne etwas damit zu machen, und führst dann die Delete/Rename Aktionen auf dieser geöffneten Ini-Datei durch ?
Außerdem fehlt bei Dir irgendwie in beiden Codeschnipseln ein "end"......?!
Kein Fehler, aber warum verwendest Du mal Application.ExeName und dann wieder ParamStr(0) ?
Noch ein Tip zur Lesbarkeit: wenn Du z.B. "ExtractFilePath(Application.ExeName)+'vers_patch. ini'" mehrfach brauchst, dann belege 1 mal ein stringvariable damit.
Last but not least würde ich eine Extra-Methode zum umbenennen der Datei machen, und diese Methode im FormShow aufrufen (also nicht Code direkt im FormShow).

Versuche mal statt
Delphi-Quellcode:
procedure TForm7.FormShow(Sender: TObject);
 var Ini : TIniFile;
 begin
  if FileExists(ExtractFilePath(Application.ExeName)+'vers_patch.ini') then begin
   Ini:=TIniFile.Create(ExtractFilePath(Application.ExeName)+'vers__patch.ini');
  try
     deletefile(ExtractFilePath(Application.ExeName)+'vers_aktuell.ini');
     renamefile(ExtractFilePath(Application.ExeName)+'vers_patch.ini',(ExtractFilePath(Application.ExeName)+'vers_aktuell.ini'));
  finally
     FreeAndNil(Ini);
  end;
 end;
einfach nur dieses:
Delphi-Quellcode:
procedure TForm7.CheckForPatchFile;
var
  patchfilename,
  currentfilename: string;
begin
  patchfilename := ExtractFilePath(Application.ExeName)+'vers_patch.ini';
  if not FileExists(patchfilename) then
    exit;
  currentfilename := ExtractFilePath(Application.ExeName)+'vers_aktuell.ini';
  deletefile(currentfilename);
  renamefile(patchfilename, currentfilename);
end;

procedure TForm7.FormShow(Sender: TObject);
begin
  CheckForPatchFile;
end;
Grüsse,
blauweiss
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#3

AW: File löschen und umbenennen geht nicht

  Alt 12. Aug 2010, 06:49
Moin,
und hast du Schreibrechte in den Ordner?

MfG
Fabian
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: File löschen und umbenennen geht nicht

  Alt 12. Aug 2010, 08:01
Hallo,

Zitat:
Wenn ich jedoch das Programm starte, ändert sich nichts.
Wo genau befindet sich deine Exe- und Ini-Datei, welches Betriebssystem.

Lege mal ein c:\temp oder falls mehrere Laufwerke vorhanden sind,
z.B. ein e:\temp an
und starte die Exe von dort.
Klappt es dort, hast du deine Exe wohl im Programme-Verzeichnis stehen,
dort hast du keine Schreibrechte.
Die Ini gehört dort nicht hin
Suche hier nach "Special Folders".


So am Rande:
Warum steht x-mal ExtractFilePath im Code statt
zwei String-Variablen zu nehmen und die Dateinamen einmal zuzuweisen.


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von Störtebeker
Störtebeker

Registriert seit: 9. Jul 2007
398 Beiträge
 
#5

AW: File löschen und umbenennen geht nicht

  Alt 12. Aug 2010, 08:54
Danke für eure Tipps und Hinweise, werde mal schauen, wie ich damit weiterkomme.

Das ganze läuft auf Windows XP (vorerst), und beiden Datein, sowohl die Exe, als auch die beiden Inis liegen in ein und dem selben Verzeichnis in einem Ordner innerhalb des "Eigene Datein" Ordner.

EDIT: Ne, bringt leider auch nichts, auch wenn es natürlich schöner aussieht im Code. Aber löscht weder die eine File, noch überschreibt er die andere.
"And he piled upon the whale´s white hump - a sum of all the rage and hate felt by his whole race.
If his chest had been a cannon, he would have shot his heart upon it."

Geändert von Störtebeker (12. Aug 2010 um 10:40 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Störtebeker
Störtebeker

Registriert seit: 9. Jul 2007
398 Beiträge
 
#6

AW: File löschen und umbenennen geht nicht

  Alt 18. Aug 2010, 22:38
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;
Ich bin gerade echt am verzweifeln... ...ich weiß nicht, aber es scheint, als würde sich Delphi um diesen Codeschnipsel gar nicht kümmern. Kein Löschen der File, kein Umbenennen der File.

Aufgerufen wird die CheckForPatchFile Procedure etwas später bei einem Timer:

Delphi-Quellcode:
procedure TForm7.Timer2Timer (Sender: TObject);
begin
 Label9.Caption:='Patching...';
 Form7.Caption:='0%';
 begin
 if FileExists(ExtractFilePath(Application.ExeName)+'vers_patch.ini') then
 CheckForPatchFile;
 Timer3.Enabled:=True;
end;
end;
Timer2 wird im FormShow Ereignis gestartet
Delphi-Quellcode:
procedure TForm7.FormCreate(Sender: TObject);
begin
Label9.Caption:='Loading...';
Timer2.Enabled:=True;
end;
"And he piled upon the whale´s white hump - a sum of all the rage and hate felt by his whole race.
If his chest had been a cannon, he would have shot his heart upon it."
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.323 Beiträge
 
Delphi XE2 Professional
 
#7

AW: File löschen und umbenennen geht nicht

  Alt 18. Aug 2010, 22:58
Hallo,

erstmal: den Code if FileExists(ExtractFilePath(Application.ExeName)+'vers_patch.ini') then im "Timer2Timer" kannst du dir ersparen, denn
das gleiche, über einen anderen Weg macht dieser Code in der Procedure CheckForPatchFile:  if not FileExists(patchfile) then exit; Lass dir doch erstmal die Rückgabewerte zurückmelden:

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
    ShowMessage(Format('Datei existiert nicht: %s', [patchfile]));
    exit;
  If not deletefile(currentfile) then
    begin
      ShowMessage('löschen fiel fehl!');
      exit;
    end;
  If not renamefile(patchfile, currentfile) then
    begin
      ShowMessage('Umbenennen fiel fehl!');
      exit;
    end;
  ShowMessage('alles scheint in Ordnung gewesen zu sein!');
end;
Die ShowMessages zeigen dir was los ist, ob das Lösen funktionierte bzw. das Umbenennen.
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<

Geändert von Helmi (18. Aug 2010 um 23:02 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Störtebeker
Störtebeker

Registriert seit: 9. Jul 2007
398 Beiträge
 
#8

AW: File löschen und umbenennen geht nicht

  Alt 18. Aug 2010, 23:11
Tja, irgendwas ist da noch im argen, da ich auch keine Rückmeldungen bekomme. Es passiert einfach nix.
"And he piled upon the whale´s white hump - a sum of all the rage and hate felt by his whole race.
If his chest had been a cannon, he would have shot his heart upon it."
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#9

AW: File löschen und umbenennen geht nicht

  Alt 18. Aug 2010, 23:13
SchowMessage ist ja eher unglücklich, vorallem wenn diese in einem Timer auftauchen ... Exceptions sind doch auch nett?


Und ich würde auch noch SysErrorMessage(GetLastError) in die Messages/Exceptions einbauen.


[edit]
Bist du sicher, diese Methode (Timerereignis) wird aufgerufen?
Nur weil eine Methode Timer2Timer heißt, muß sie nicht mit dem timer2 verknüpft sein und der Timer muß auch nicht unbedingt aktiv sein.

Ich schlage für sowas immer etwas sehr Praktisches vor
und das nennt sich Debuggen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (18. Aug 2010 um 23:16 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.323 Beiträge
 
Delphi XE2 Professional
 
#10

AW: File löschen und umbenennen geht nicht

  Alt 18. Aug 2010, 23:14
Setz halt mal beim Aufruf von CheckForPatchFile einen Breakpoint und schau ob das Programm dort überhaupt aufgerufen wird und wenn ja, dann jumpe einfach mit F7 mal weiter.

Was für einen Intervall hast du beim Timer 2?

Ruf halt mal die Procedure CheckForPatchFile über einen Button auf. Um festzustellen ob was geht
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:33 Uhr.
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