Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Dateien kopieren mit Platzhalter?? (https://www.delphipraxis.net/80700-dateien-kopieren-mit-platzhalter.html)

Ammersmann 13. Nov 2006 23:24


Dateien kopieren mit Platzhalter??
 
Hallo,
Ich suche nach einer einfachen Metode Dateien von der Festplatte auf eine Diskette zu kopieren.
Ich möchte alle Dateien eines Verzeichnisses mit der Endung ( DB ) und ( PX ) kopieren.

Im Moment mache ich das so wie im Beispiel unten:
Delphi-Quellcode:
CopyFile(Pchar('C:\ABC\Kunden.db'),Pchar('A:\Ablage\Kunden.DB'),false) ;
CopyFile(Pchar('C:\ABC\Rechnungen.db'),Pchar('A:\Ablage\Rechnungen.DB'),false);
CopyFile(Pchar('C:\ABC\Nummer.db'),Pchar('A:\Ablage\Nummer.DB'),false);
CopyFile(Pchar('C:\ABC\Nummer.px'),Pchar('A:\Ablage\Nummer.px'),false);
FARGE:

Gibt es nicht auch eine Möglichkeit das in ein zwei zeilen zu bringen da es sich bei mit um ca.45 Dateien handelt, ich Dachte da an so was wie.
Delphi-Quellcode:
CopyFile(Pchar('C:\ABC\*.db'),Pchar('A:\Ablage\'),false) ;
CopyFile(Pchar('C:\ABC\*.px'),Pchar('A:\Ablage\'),false) ;
Geht bei mir aber nicht!!
WIESO???

Und gibt es eine Möglichkeit die Dateien in A:\Ablage vor dem Kopieren zu löschen, wenn das Verzeichnis den schön angelegt ist?

[edit=SirThornberry]Delphi-Tags gesetzt - Mfg, SirThornberry[/edit]

Luckie 13. Nov 2006 23:55

Re: Dateien kopieren mit Platzhalter??
 
Such mal im Forum bach Hier im Forum suchenSHFilOperation.

Sunlight7 14. Nov 2006 04:26

Re: Dateien kopieren mit Platzhalter??
 
Zitat:

Zitat von Luckie
Such mal im Forum bach Hier im Forum suchenSHFilOperation.

Such lieber nach Hier im Forum suchenSHFileOperation. :P :mrgreen:

Ammersmann 19. Nov 2006 23:57

Re: Dateien kopieren mit Platzhalter??
 
OK, Danke
habe jetzt die richtige function gefunden!!
so geht es!


Delphi-Quellcode:
function CopyFileEx(const ASource, ADest: String;
 ARenameCheck: boolean = false): boolean;
var
  sh: TSHFileOpStruct;
begin
  sh.Wnd := Application.Handle;
  sh.wFunc := FO_COPY;

  // String muss mit #0#0 Terminiert werden, um das Listenende zu setzen
  sh.pFrom := PChar(ASource + #0);
  sh.pTo := PChar(ADest + #0);
  sh.fFlags := FOF_ALLOWUNDO or fof_MultiDestFiles;
  if ARenameCheck then
    sh.fFlags := sh.fFlags or fof_RenameOnCollision;
  Result:=ShFileOperation(sh)=0;
end;


procedure TForm1.FlatSpeedButton7Click(Sender: TObject);
begin
CopyFileEx(''+Ver+''+'\*.DB',''+dira+'');
CopyFileEx(''+Ver+''+'\*.PX',''+dira+'');
CopyFileEx(''+Ver+''+'\*.val',''+dira+'');
end;

bis dann

[edit=Christian Seehase]Delphi-Tags gesetzt. Bitte künftig selber machen. Danke. Mfg, Christian Seehase[/edit]

Martin K 20. Nov 2006 00:07

Re: Dateien kopieren mit Platzhalter??
 
Warum eigentlich immer +''+ ?
Das ergibt doch keinen Sinn, einfach einen leeren String dazwischen machen :gruebel:

So sollte es genügen:
Delphi-Quellcode:
procedure TForm1.FlatSpeedButton7Click(Sender: TObject);
begin
  CopyFileEx(Ver+'\*.DB', dira);
  CopyFileEx(Ver+'\*.PX', dira);
  CopyFileEx(Ver+'\*.val',dira);
end;

Sunlight7 20. Nov 2006 00:49

Re: Dateien kopieren mit Platzhalter??
 
Hoppla, das hab'n wir ganz vergessen:

Herzlich Willkommen in der DP! :cheers:
Nicht vergessen: :dp: :zwinker:

StefanG 20. Nov 2006 07:37

Re: Dateien kopieren mit Platzhalter??
 
Zitat:

Zitat von Martin K
Warum eigentlich immer +''+ ?
Das ergibt doch keinen Sinn, einfach einen leeren String dazwischen machen :gruebel:

So sollte es genügen:
Delphi-Quellcode:
procedure TForm1.FlatSpeedButton7Click(Sender: TObject);
begin
  CopyFileEx(Ver+'\*.DB', dira);
  CopyFileEx(Ver+'\*.PX', dira);
  CopyFileEx(Ver+'\*.val',dira);
end;

die doppelten hochkommata sorgen dafür, dass der Resultierende String selber in Hochkommata steht. Im Prinzip das gleich wie
Code:
CopyFileEx(QuotedStr(Ver+'\*.DB', dira));

Muetze1 20. Nov 2006 08:20

Re: Dateien kopieren mit Platzhalter??
 
Zitat:

Zitat von StefanG
Zitat:

Zitat von Martin K
Warum eigentlich immer +''+ ?
Das ergibt doch keinen Sinn, einfach einen leeren String dazwischen machen :gruebel:

So sollte es genügen:
Delphi-Quellcode:
procedure TForm1.FlatSpeedButton7Click(Sender: TObject);
begin
  CopyFileEx(Ver+'\*.DB', dira);
  CopyFileEx(Ver+'\*.PX', dira);
  CopyFileEx(Ver+'\*.val',dira);
end;

die doppelten hochkommata sorgen dafür, dass der Resultierende String selber in Hochkommata steht. Im Prinzip das gleich wie
Code:
CopyFileEx(QuotedStr(Ver+'\*.DB', dira));

Doppelt falsch.

1. Es ist ein Leerstring, welcher wegfällt. Wenn es in Hochkomma's stehen soll, dann muss es ein String mit einem Hochkomma sein. Dieser würde dann aber auf 4 Hochkomma's bestehen: '''' (Anfang, Ende und dazwischen der doppelte für ein Hochkomma im String)

2. Zusätzlich würde QuotedStr() Hochkommas im String auch noch entsprechend escapen.

3. QuotedStr() hat nur einen Parameter - du hast falsch geklammert...


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