Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Mit Delphi Dateien kopieren (https://www.delphipraxis.net/93745-mit-delphi-dateien-kopieren.html)

FreakLitkowsky 10. Jun 2007 19:22


Mit Delphi Dateien kopieren
 
Hi
Ich arbeite gerade an einem Projekt, dass (für ein eigenes Spiel) eine Mapauswahl darstellt, deshalb benötige ich eure Hilfe:

Wie kann ich eine Datei in einen anderen Ordner kopieren (nicht verschieben), und dass die ältere Datei dadurch ersetzt wird? :gruebel:

Beispiel:
Die Datei "Beispielmap.lmu" aus dem Ordner "Data\Maps\" soll in den Ordner "Data\" kopiert werden und die dort befindliche Datei "Beispielmap.lmu" überschreiten.


Mein Versuch, die Datei in einem Memo einzufügen und dessen Inhalt dann als "Beispielmap.lmu" zu speichern ist leider schief gegangen :oops: (War auch nur ein Test) :P .


Ich würde mich freuen wenn ihr mir antworten würdet^^ :mrgreen:

DeddyH 10. Jun 2007 19:25

Re: Mit Delphi Dateien kopieren
 
Hallo, versuch es mal mit CopyFile (Win32-API).

FreakLitkowsky 10. Jun 2007 19:28

Re: Mit Delphi Dateien kopieren
 
Hallo
Danke für die schnelle Antwort.

Könntest du mir ein Quellcode beispiel machen, wie es in Delphi aussehen soll, am besten indem du die oben genannten Dateien und Pfade u.s.w. benutzt.
Wäre echt nett. :wink:

DeddyH 10. Jun 2007 19:31

Re: Mit Delphi Dateien kopieren
 
Delphi-Quellcode:
function DateiKopieren(const Quelle, Ziel: string; Ueberschreiben: Boolean = true): Boolean;
begin
  Result := CopyFile(PChar(Quelle),PChar(Ziel),not Ueberschreiben);
end;
//Edit: War ein Fehler drin, es muss natürlich "not Ueberschreiben" heißen :oops:

FreakLitkowsky 10. Jun 2007 19:44

Re: Mit Delphi Dateien kopieren
 
Das scheint bei mir nicht zu funktionieren :wall:
hab wahrscheinlich irgendetwas falsch gemacht. Verdammt!

Ich hab jetzt die "function" in meinem Quelltext hinzugefügt, wie kann ich diese jetzt aufrufen :oops: ?
Hab glaub ich nicht erwählt, dass ich noch ein Anfänger bin :wink:

scrat1979 10. Jun 2007 19:48

Re: Mit Delphi Dateien kopieren
 
Kann es sein, dass evtl. die Unit ShellAPI eingebunden werden muß? :gruebel:

SCRaT

FreakLitkowsky 10. Jun 2007 19:52

Re: Mit Delphi Dateien kopieren
 
:wiejetzt:

Stefan92 10. Jun 2007 19:54

Re: Mit Delphi Dateien kopieren
 
Hallo,

normalerweise ruft man Funktionen mit ihrem Namen auf.
Also in diesem Beispiel mit:
Delphi-Quellcode:
  DateiKopieren(Quelle, Ziel, Ueberschreiben (true oder false) );
Und wenn du eine Unit einbinden willst, schreibst du sie einfach in den uses-Teil.
Delphi-Quellcode:
  uses windows, string..., ShellApi;
Gruß

Stefan

Neutral General 10. Jun 2007 19:55

Re: Mit Delphi Dateien kopieren
 
Zitat:

Zitat von scrat1979
Kann es sein, dass evtl. die Unit ShellAPI eingebunden werden muß? :gruebel:

SCRaT

Nein muss sie nicht. CopyFile ist Bestandteil der Unit "Windows"!

Gruß
Neutral General

FreakLitkowsky 10. Jun 2007 20:04

Re: Mit Delphi Dateien kopieren
 
Tut mir wirklich leid, aber ich verstehe nicht so ganz.
Am meisten verwirrt mich dieses "Result":
Zitat:

function DateiKopieren(const Quelle, Ziel: string; Ueberschreiben: Boolean = true): Boolean;
begin
Result := CopyFile(PChar(Quelle),PChar(Ziel),not Ueberschreiben);
end;
Was hat es damit auf sich, wieso weiße ich "Result" etwas zu?
Ich wollte eigendlich nur eine Datei in einen anderen Ordner kopieren :mrgreen:

Trotzdem zu allen: Danke für eure Mühe!

Matze 10. Jun 2007 20:11

Re: Mit Delphi Dateien kopieren
 
Hi,

dir fehlen jegliche Grundlagen. Arbeite mal diesen Crashkurs durch. Da wird auf Funktionen und ähnliches genau eingegangen.

FreakLitkowsky 10. Jun 2007 20:21

Re: Mit Delphi Dateien kopieren
 
Danke werde ich mich sofort dransetzen.

Neutral General 10. Jun 2007 20:21

Re: Mit Delphi Dateien kopieren
 
Also

Beispiel:

Delphi-Quellcode:
CopyFile(PChar('C:\Datei.dat'),PChar('C:\Programme\Datei.dat'),false);
Das kopiert die Datei Datei.dat von C:\ nach C:\Programme\. Der letzte Parameter an gibt an ob der Vorgang fehlschlägt wenn die Zieldatei schon existiert. Also false bedeutet überschreiben.

DeddyH hat das ganze nur in eine eigene Funtkion gpackt:

Delphi-Quellcode:
function DateiKopieren(const Quelle, Ziel: string; Ueberschreiben: Boolean = true): Boolean;
begin
  Result := CopyFile(PChar(Quelle),PChar(Ziel),not Ueberschreiben);
end;
Aufruf:

Delphi-Quellcode:
DateiKopieren('C:\Datei.dat','C:\Programme\Datei.dat',true);
ergibt das gleiche wie oben.

Jede Funktion hat ein Ergebnis. Dieses Ergebnis muss man der Funktion zuweisen. Entweder nimmt man den Functionsnamen oder man nimmt "Result".

Beispiel

Delphi-Quellcode:
function Addieren(a,b: Integer): Integer;
begin
  Result := a + b;
end;
oder eben

Delphi-Quellcode:
function Addieren(a,b: Integer): Integer;
begin
  Addieren := a + b;
end;
Aufrufen tut man die function dann so:

Delphi-Quellcode:
var Ergebnis: Integer;
begin
  Ergebnis := Addieren(5,3);
end;
Die function CopyFile hat auch ein Ergebnis.. Aber vom Typ Boolean (true/false). True bedeutet das die Datei erfolgreich kopiert wurde, false bedeutet einen Fehlschlag.

=>

Delphi-Quellcode:
if CopyFile(PChar('C:\Datei.dat'),PChar('C:\Programme\Datei.dat'),false) then
  ShowMessage('Datei erfolgreich kopiert!')
else ShowMessage('Fehler beim kopieren!');
Ich hoffe ich konnte da etwas Klarheit in die Sache bringen ;)

Gruß
Neutral General

DeddyH 10. Jun 2007 20:24

Re: Mit Delphi Dateien kopieren
 
Super erklärt :thumb: , aber ein kleiner Nachtrag: meine Funktion kann mit 2 oder 3 Parametern aufgerufen werden. Die beiden Pflicht-Parameter sind die Dateinamen. Wenn der 3. Parameter nicht angegeben wird, wird davon ausgegangen, dass die Datei überschrieben werden soll.

//Edit: Nachtrag zum Nachtrag: Obwohl es sich um eine Funktion (also mit Rückgabewert) handelt, muss dieser Rückgabewert nicht zwingend ausgewertet werden. Falls es den Threadsersteller also nicht interessieren sollte, ob die Datei kopiert wurde, kann er die Zuweisung auch sein lassen und einfach (Beispiel)
Delphi-Quellcode:
DateiKopieren('C:\Quelle.txt','C:\Ziel.txt');
aufrufen. Inwieweit das sinnvoll ist, muss jeder selber wissen. So, nun mach ich aber Feierabend für heute.

FreakLitkowsky 10. Jun 2007 21:14

Re: Mit Delphi Dateien kopieren
 
Ahhh, jetzt hab ich es verstanden.

Danke :cheers: :dancer: :dancer: :dancer2:

ichbins 10. Jun 2007 21:26

Re: Mit Delphi Dateien kopieren
 
Und noch was:

Wenn du die Funktion nur einfach einfügst, kannst du sie nur von Codestellen aus aufrufen, die unterhalb davon liegen.

Damit du die Funktion auch woanderst aufrufen kannst, musst du ihre "Titelzeile" noch oben in den Interface-Teil einfügen, also inetwa so:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

//hier einfügen
function DateiKopieren(const Quelle, Ziel: string; Ueberschreiben: Boolean = true): Boolean;

var
  Form1: TForm1;

implementation

{$R *.dfm}


(...)


//und hier unten dann die komplette funktion rein
Wenn du die Funktion einfach nur "so" in den Codeabschnitt reinschreibst, ohne sie oben zu definieren, ist das "schlampig programmiert".

FreakLitkowsky 13. Jun 2007 11:21

Re: Mit Delphi Dateien kopieren
 
Okay ich habs jetzt einigermaßen verstanden.

Jetzt hab ich eine neue Frage :lol: :
Wie kann ich ein ganzes Verzeichniss (Also einen Ordner plus Daten) kopieren?

SaFu 13. Jun 2007 11:25

Re: Mit Delphi Dateien kopieren
 
Hiermit

Uses ShellApi
Delphi-Quellcode:
function TForm7.MoveDir(const fromDir, toDir: string): Boolean;
var
  fos: TSHFileOpStruct;
begin
  ZeroMemory(@fos, SizeOf(fos));
  with fos do
  begin
    wFunc := FO_MOVE;
    fFlags := FOF_FILESONLY;
    pFrom := PChar(fromDir + von Deinem ordner;
    pTo   := PChar(toDir zu diesem Ordner;
  end;
  Result := (0 = ShFileOperation(fos));
  Timer1.Enabled:= False;
end;
Delphi-Quellcode:
procedure TForm7.ordnerverschieben;
Var pFrom,pTo :String;
begin
    if MoveDir(pFrom,pTo) = True then

FreakLitkowsky 13. Jun 2007 15:27

Re: Mit Delphi Dateien kopieren
 
Hi!
Ich wollte den Ordner nicht verschieben, sondern kopieren.
Trotzdem danke.

FreakLitkowsky 15. Jun 2007 20:33

Re: Mit Delphi Dateien kopieren
 
Halloooo jemand da? :roteyes:

mkinzler 15. Jun 2007 20:35

Re: Mit Delphi Dateien kopieren
 
http://www.delphipraxis.net/internal...=247871#247871

FreakLitkowsky 15. Jun 2007 20:49

Re: Mit Delphi Dateien kopieren
 
In diesem Link sucht doch auch einer nach dem Befehl :gruebel: .

Weiß jemand zufällige wie der Befehl jetzt entgültig geht, ein ganzes Verzeichniss + Dateien zu kopieren???

lbccaleb 15. Jun 2007 21:24

Re: Mit Delphi Dateien kopieren
 
Delphi-Quellcode:
uses shellapi;

function CopyDir(const fromDir, toDir: string): Boolean;
var
  fos: TSHFileOpStruct;
begin
  ZeroMemory(@fos, SizeOf(fos));
  with fos do
  begin
    wFunc := FO_COPY;
    fFlags := FOF_FILESONLY;
    pFrom := PChar(fromDir + #0);
    pTo   := PChar(toDir)
  end;
  Result := (0 = ShFileOperation(fos));
end;
versuchs mal hiermit, sollte eigentlich klappen hab ich hier gefunden:

http://www.delphipraxis.net/internal...=247871#247871

Hawkeye219 15. Jun 2007 21:54

Re: Mit Delphi Dateien kopieren
 
Hallo,

so sollte es funktionieren:

Delphi-Quellcode:
uses shellapi;

function CopyDir(const fromDir, toDir: string): Boolean;
var
  fos: TSHFileOpStruct;
begin
  ZeroMemory(@fos, SizeOf(fos));
  with fos do
  begin
    wFunc := FO_COPY;
//    fFlags := FOF_FILESONLY;
    fFlags := 0;
    pFrom := PChar(fromDir + #0);
    pTo   := PChar(toDir)
  end;
  Result := (0 = ShFileOperation(fos));
end;

begin
  CopyDir ('C:\From', 'C:\To');     // kopiert mit Quellordner
  CopyDir ('C:\From\*.*', 'C:\To'); // kopiert Inhalt des Quellordners
end
Gruß Hawkeye

FreakLitkowsky 16. Jun 2007 23:58

Re: Mit Delphi Dateien kopieren
 
Hi
Kopiert der beim ersten
Delphi-Quellcode:
 CopyDir ('C:\From', 'C:\To');     // kopiert mit Quellordner
Jetzt den Ordner sammt Inhalt oder nur den Ordner?

FreakLitkowsky 17. Jun 2007 00:02

Re: Mit Delphi Dateien kopieren
 
@Hawkeye219:
Hat sich schon erledigt.
Danke hat alles bestens geklappt. Vielen Dank!


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:26 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