![]() |
Dateien kopieren
Hi Experten,
ich habe ein Frage zu folgender Function:
Delphi-Quellcode:
Diese Function kopiert Datein eigentlich sehr gut, da die einfachere Version
function CopyFileEx(const ASource, ADest: String; rooten:string;
ARenameCheck: boolean = true): boolean; var sh: TSHFileOpStruct; begin ForceDirectories(rooten); 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_Silent or fof_MultiDestFiles; if ARenameCheck then sh.fFlags := sh.fFlags or fof_RenameOnCollision; Result:=ShFileOperation(sh)=0; end; Function Copyfile(src,dest,overwrite); bei mir irgendwie nicht funktioniert. Jetzt ist es aber so, dass die Function oben, eine Kopie einer Datei anlegt, wenn diese schon existiert. Ich will aber, dass es die Datei überschreibt, ohne irgendeinen Eingriff, da es um ein Synchronisationsprogramm geht und es da dumm ist, wenn der Nutzer jede Datei bestätigen muss, die sich geändert hat. Kann mir jemand bitte sagen, was ich ändern muss, damit die Function keine Kopie anlegt und auch nicht auf ein "Wollen Sie die Datei wirklich überschreiben?" Fenster öffnent? Denke mal, dass man hier
Delphi-Quellcode:
was ändern muss, habe aber leider nicht so viel Ahnung von der Windows API.
if ARenameCheck then
sh.fFlags := sh.fFlags or fof_RenameOnCollision; Result:=ShFileOperation(sh)=0; Hoffe Ihr wisst Rat. :-D Gruß Masteric PS: Die Variable Rooten die ich mir noch nachträglich eingebaut hab, sorgt dafür, dass das Unterverzeichniss der zu Kopierenden Datei erstellt wird, wenn es noch nicht vorhanden ist. PS: Er kopiert oftmals auch verschiedene Datein nicht, die aber manuell einfach kopiert werden können, wer also eine gut funktionierende Methode hat, kann sie gerne auch Posten :-D . [edit=Matze]Es heißt "Dateien", nicht "Datein". Damit man das Thema über die Suchfunktion findet, habe ich den Tittel korrigiert. MfG, Matze[/edit] |
Re: Datein kopieren
Hallo,
probier mal das:
Delphi-Quellcode:
mfg
function CopyFileEx(const ASource, ADest: String; rooten:string;
ARenameCheck: boolean = true): boolean; var sh: TSHFileOpStruct; begin ForceDirectories(rooten); 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_Silent or fof_MultiDestFiles or FOF_NOCONFIRMATION; // Wichtig ist das "or FOF_NOCONFIRMATION;" if ARenameCheck then sh.fFlags := sh.fFlags or fof_RenameOnCollision; Result:=ShFileOperation(sh)=0; end; Tommy82 |
Re: Dateien kopieren
danke :thumb: das funktioniert super!
Darauf wäre ich auch echt nicht gekommen, ich hatte ja in der Zeile darunter probiert etwas zu ändern Gruß Masteric |
Re: Dateien kopieren
Moin Masteric,
Du solltest Dir einfach mal die Dokumentation der möglichen Flags im PSDK anschauen ( ![]() Ausserdem wäre es ganz gut, die Struktur zu Beginn einmal zu initialisieren:
Delphi-Quellcode:
Das ForceDirectories müsstest Du Dir eigentlich auch sparen können, wobei Du evtl. noch FOF_NOCONFIRMMKDIR bei den Flags hinzufügen müsstest.
FillChar(sh,SizeOf(sh),0);
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:15 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