Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Kopieren mit Opendialog.Filename nicht möglich (https://www.delphipraxis.net/144735-kopieren-mit-opendialog-filename-nicht-moeglich.html)

Larsi 15. Dez 2009 13:20


Kopieren mit Opendialog.Filename nicht möglich
 
Hi,
ich möchte, dass der Benutzer eine Datei auswählen kann (mit OpenDialog) welche dann an einen bestimmten Ort kopiert wird. Falls die Datei dort schon vorhanden ist soll sie überschrieben werden. Hier mal der Code:

Delphi-Quellcode:
if OpenDialog1.execute then begin
if Fileexists('test.abc') then
DeleteFile('test.abc');
Copyfile(Pchar(Opendialog1.filename), Pchar('test.ab'), true);
end;
Die Datei wird aber nicht kopiert. Selbst wenn keine andere Datei vorher da war. Woran kann das liegen? Mit richtigen Dateinamen (also mit C:\ blabla davor) gehts auch nicht. Verhindert der Opendialog das kopieren, da er selber die Datei reserviert oder so?

MFG Lars Wiltfang

DeddyH 15. Dez 2009 13:24

Re: Kopieren mit Opendialog.Filename nicht möglich
 
Keine relativen Pfade verwenden (das wird hier mindestens einmal die Woche gesagt) und ansonsten einmal GetLastError bemühen. Übrigens musst Du die Zieldatei nicht vorher löschen, wenn Du Dir die Parameter von CopyFile einmal in Ruhe anschaust.

Larsi 15. Dez 2009 13:33

Re: Kopieren mit Opendialog.Filename nicht möglich
 
Delphi-Quellcode:
ShowMessage(GetLastError);
Da steht 0.

himitsu 15. Dez 2009 13:34

Re: Kopieren mit Opendialog.Filename nicht möglich
 
Zitat:

Zitat von DeddyH
Keine relativen Pfade verwenden (das wird hier mindestens einmal die Woche gesagt)

der Grund: der Opendialog verändert das aktuelle Arbeitsverzeichnis des Programms und relative Pfade sind relativ zu diesem aktuellen Arbeitsverzeichnis.


Zitat:

Zitat von Larsi
Delphi-Quellcode:
ShowMessage(GetLastError);
Da steht 0.

und wonach hattest du dieses abgefragt?

hoika 15. Dez 2009 13:34

Re: Kopieren mit Opendialog.Filename nicht möglich
 
Hallo,

Delphi-Quellcode:
if OpenDialog1.execute then
begin
  if FileExists('test.abc') then
  begin
    DeleteFile('test.abc');
  end;
  Copyfile(Pchar(Opendialog1.filename), Pchar('test.ab'), true);
end;
2 mal 'test.abc'
1 mal 'test.ab'

???

Ich würde bei 3mal der gleichen Datei
eh eine Variable/Konstante nehmen.

Das mit den absoluten Pfaden hast du ja schon gelesen.


Heiko

DeddyH 15. Dez 2009 13:37

Re: Kopieren mit Opendialog.Filename nicht möglich
 
Und nun zusammengefasst:
Delphi-Quellcode:
const MyFilename = 'test.abc';
...
if OpenDialog1.execute then begin
  if not Copyfile(Pchar(Opendialog1.filename), Pchar(IncludeTrailingPathDelimiter(MyPath) + MyFilename), false) then
    MessageBox(0,PChar(SysErrorMessage(GetLastError)),nil,MB_OK or MB_ICONERROR);
end;

haentschman 15. Dez 2009 18:26

Re: Kopieren mit Opendialog.Filename nicht möglich
 
:cheer: DeddyH hat´s endlich hingekriegt den aus dem OpenDialog übergebenen Filenamen zu verwenden...
:gruebel: aber warum die Konstante für die Zieldatei ? Wenn ich eine Datei kopiere möchte ich auch, daß sie so heißt wie vorher.

rollstuhlfahrer 15. Dez 2009 19:01

Re: Kopieren mit Opendialog.Filename nicht möglich
 
Dann nimm halt den Dateinamen
Delphi-Quellcode:
if OpenDialog1.execute then begin
  if not Copyfile(Pchar(Opendialog1.filename), Pchar(IncludeTrailingPathDelimiter(MyPath) + ExtractFileName(opendialog1.filename)), false) then
    MessageBox(0,PChar(SysErrorMessage(GetLastError)),nil,MB_OK or MB_ICONERROR);
end;
Bernhard


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:21 Uhr.

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