Entwickler-Ecke
Dateizugriff - copyfile() macht nichts...
Grappa's Hammer - So 31.07.05 15:25
Titel: copyfile() macht nichts...
===> ACHTUNG: N00b postet <===
Hallo!
Ich bin gerade dabei, mein erstes Delphi-Programm zu schreiben, dass etwas über das "Hello World"-Niveau hinausgeht. Es soll ein Programm werden, dass mit WinRAR eine Setup.exe für Elder Scrolls-Plugins erstellen soll.
Ich habe nun folgendes Problem:
Der Ersteller des Setups soll benutzerdefiniert bis zu 4 Bilder einfügen können. Der Pfad jeder einzelnen wird in einem solchen array gespeichert:
Delphi-Quelltext
1:
| PictureURI:Array[1..4] of string; |
Klickt man aber einmal auf einen Button mit folgender Prozedur
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| procedure TMainForm.SetStyleSelectPicture1_ButtonClick(Sender: TObject); var fx:string; begin
if OpenPicture_Dialog.Execute=true then begin fx:=OpenPicture_Dialog.FileName; if fileexists(fx) then PictureURI[1]:=fx else begin Application.MessageBox('The file you selected could not be loaded!','File Error!',32); exit; end; end;
end; |
kopiert die Anwendung später mit copyfile() einfach keine Dateien mehr. Folgende Befehle aus einer ganz anderen Prozedur werden schlichtweg nicht ausgeführt, alles andere, das nichts mit copyfile() zu tun hat, dagegen schon:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25:
| procedure TMainForm.SummaryCompile_ButtonClick(Sender: TObject); var i,_i:integer; f:textfile; fn:string; begin
... SummaryStatus_ChecklistBox.Items.Add();
if fileexists('rarsfxfile.exe') then deletefile('rarsfxfile.exe');
copyfile('.\..\rar\rar.exe',pchar(mw_dir+'\rar.exe'),true); copyfile('.\..\rar\rarsfxfile.exe',pchar(mw_dir+'\rarsfxfile.exe'),false); copyfile('.\..\rar\test.file',pchar(mw_dir+'\_test.file'),false);
if not fileexists(mw_dir+'\rar.exe') do begin showmessage('dateien wurden einfach nicht kopiert. application.terminate; end;
...
end; end. |
Könnt Ihr mir hier helfen? Ich habe nicht die geringste Ahnung, warum die 3 Dateien mit copyfile() überhaupt nicht kopiert werden, wenn man auf den SetStyleSelectPicture1_Button klickt (nur dann. Andernfalls schon!).
mfg,
jens
Moderiert von
AXMD: Code- durch Delphi-Tags ersetzt.
SMO - So 31.07.05 15:50
Hallo!
Dein Code lässt sich vereinfachen, wenn du mit dem Objektinspektor in deinem OpenDialog die Options ofPathMustExist und ofFileMustExist auf True setzt. Dann kann der OpenDialog nämlich keine Dateien zurückgeben, die es nicht gibt.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| procedure TMainForm.SetStyleSelectPicture1_ButtonClick(Sender: TObject); begin if OpenPicture_Dialog.Execute then begin PictureURI[1] := OpenPicture_Dialog.FileName; end; end; |
So, jetzt zu deinem Problem. Du benutzt relative Pfade (z.B. '.\..\rar\rar.exe'), sie beziehen sich auf das gegenwärtige Arbeitsverzeichnis deines Programms. Und dieses kann durch Aufruf des OpenDialogs verändert werden. Deshalb solltest du vor den Dateioperationen immer das aktuelle Verzeichnis mit
ChDir setzen (und zwar als absoluten Pfad), damit du absolut sicher bist, auf welche Basis sich nun die relativen Pfadangaben beziehen.
Grappa's Hammer - So 31.07.05 17:44
Titel: fileopen_dialog ändert chdir...
ok vielen dank.
ist ja tatsächlich so. :?
ok nochma vielen dank. da hab ich echt ne ganz schöne weile dran gesessen und war trotzdem zu dumm für.
mfg,
jens
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!