Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi CopyFile... Kopieren mit Delphi (https://www.delphipraxis.net/4505-copyfile-kopieren-mit-delphi.html)

Mitchl55 2. Mai 2003 11:07


CopyFile... Kopieren mit Delphi
 
Hallo...

möchte ein komplettes Verzeichnis von Festplatte A nach Festplatte B kopieren, welches aber so nicht klappt:

Delphi-Quellcode:
CopyFile(pchar('F:\Test\*.*'),pchar('C:\Test\*.*'),False);
Delphi kopiert nur wenn ich Dateinamen mit angebe, also so:

Delphi-Quellcode:
CopyFile(pchar('F:\Test\Test1.tst'),pchar('C:\Test\Test1.tst'),False);
Was mache ich falsch, oder geht das mit den '*' zeichen so nicht?

Danke & Gruß

Mitchl

sakura 2. Mai 2003 11:18

CopyFile ist zum Kopieren einer einzelnen Datei - geht also nicht. In Der Code-Library gibt es aber eine Lösung, welche Dir helfen sollte ;-)

http://www.delphipraxis.net/viewtopic.php?t=1451

...:cat:...

Mitchl55 3. Mai 2003 15:43

Hab es mal so versucht... alle Dateien aus dem Verzeichnis X Festplatte A in das nicht existierende Verzeichnis Y Festplatte B zu kopieren ...den anderen Vorschlag verstehe ich nicht so!

Delphi-Quellcode:
if FindFirst(ListBox2.Items[0]+'*.*', faAnyFile, SearchRec) = 0 then begin
    while FindNext(SearchRec) = 0 do begin
          CopyFile(pchar(ListBox1.Items[X] + SearchRec.Name),pchar(ListBox2.Items[Y] + SearchRec.Name),False);
    end;
          FindClose(SearchRec);
 end;
Irgendwie ist da aber noch ein Fehler im Source und erstellt Delphi nicht vorhandene Verzeichnisse automatisch?

Gruß

Michl

mirage228 3. Mai 2003 15:50

verzeichnisse musst du selber erstellen
versuchs mal mit: ForceDirectory oder so

Christian Seehase 3. Mai 2003 15:59

Moin Michl,

bei Deinem Aufbau geht Dir immer der erste gefundenen Eintrag verloren, da Du nach erfolgreichen FindFirst (das den ersten Eintrag liefert) gleich den nächsten abforderst (FindNext), ohne den ersten zu verarbeiten.

Ausserdem willst Du, ohne Prüfung, alles kopieren, was FindFirst findet. Dies können ausser Dateien aber auch Verzeichnisse sein, ebenso wie die Standardeinträge in Verzeichnissen, nämlich . und ..

Such' doch mal hier im Forum nach FindFirst. Du müsstest einige Fundstellen bekommen, die Dir noch mehr Einzelheiten verraten.

Zitat:

Zitat von Mitchl55
... und erstellt Delphi nicht vorhandene Verzeichnisse automatisch?

In diesem Falle, Aufruf der API Funktion CopyFile, werden Verzeichnisse nicht automatisch erstellt. Du könntest SHFileOperation verwenden. Diese Funktion versucht nicht existierende Verzeichnisse zu erstellen.
Dazu gibt es auch schon einen Eintrag hier in der Code Library, die den Umgang mit SHFileOperation erleichtert.

Um selber Pfade (und nicht nur einzelne Verzeichnisse zu erstellen) stellt Delphi die Funktion ForceDirectories zur Verfügung.

Duffy 3. Mai 2003 16:02

Hallo Mitchl55,
ich weiß nicht warum den Lösungsungsweg von Sakura nicht magst. Ist aber der saubere Weg ganze Verzeichnise zu kopieren.
Hier ist noch einmal eine Funktion die auf das ShellAPI aufsetzt.
Delphi-Quellcode:
function SHCopyFile(Handle: THandle; szSource, szDestination: TFileName): Boolean;
var
  ShellFileOperation: TSHFileOpStruct;
begin
  Result := True;
  try
    with ShellFileOperation do
    begin
      Wnd := Handle;
      wFunc := FO_COPY;
      pFrom := PChar(szSource);
      pTo := PChar(szDestination);
      // fFlags := FOF_FILESONLY OR FOF_NOCONFIRMMKDIR FOF_SIMPLEPROGRESS;
      fFlags := FOF_NOCONFIRMMKDIR;
      lpszProgressTitle := 'Dateien kopieren ...';
    end;                                  
    SHFileOperation(ShellFileOperation);
  except
    Result := False;
  end;
end;
Nicht vergessen die Unit ShellAPI einzubinden!

bye

Mitchl55 3. Mai 2003 17:00

Ich bin einfach zu blöde! Die Funktion bekomme ich so nicht eingebunden!

und so klappt es auch nicht! Verzeichnis falsch angegeben? Muss da ein *.* hinter? Will doch nur alle Dateien von 'e:\k-test' nach 'f:\test' kopieren!

Delphi-Quellcode:
begin
  try
    with ShellFileOperation do
    begin
      Wnd := Handle;
      wFunc := FO_COPY;
      pFrom := PChar('e:\k-test');
      pTo := PChar('F:\Test');
       fFlags := FOF_FILESONLY; //OR FOF_NOCONFIRMMKDIR FOF_SIMPLEPROGRESS;
      //fFlags := FOF_NOCONFIRMMKDIR;
      lpszProgressTitle := 'Dateien kopieren ...';
    end;
    SHFileOperation(ShellFileOperation);
  except
end;
Gruß

Mitchl

Duffy 3. Mai 2003 17:59

Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
warum denn gleich verzweifeln .. es geht auch anders. Ich hoffe das Muster reicht Dir.
bye

Mitchl55 4. Mai 2003 01:14

Besten Dank! Hab es ausprobiert und es läuft! Weis auch nicht in welcher Ecke ich wieder gegraben habe... :roll:

Gruß

Mitchl


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