![]() |
Kopieren der Dateien die sich verändert haben
hallo zusammen,
ich habe da folgendes problem: in einem verzeichnis befinden sich verschiedene textdateien. in meinem delphi programm wird eine datei ausgewählt und ausgelesen und anschliessend kann der bediener den inhalt dieser datei ändern. nun möchte ich nachdem der bediener die datei geändert hat, nur diese datei aus dem verzeichnis in ein anderes verzeichnis kopieren. da ja sich nur diese geändert hat. die anderen datei sollen nicht aus dem verzeichnis kopiert werden. 1. gibt es in delphi einen befehl wie z.b. unter dos (xcopy /m) der nur die veränderten dateien kopiert mit der SHFileOperation wollte ich dies machen, aber irgendwie funktioniert das nicht so ganz. da er jedesmal fragt, soll die datei überschrieben werden oder nicht... ausserdem schaffe ich folgendes auch nicht. ich möchte die (z.b.)test.txt-datei, in das neue verzeichnis mit dem name test021003.txt kopieren, kann mir da vielleicht jemand helfen. ich bin schon ganz verzeifelt.... :wall: :wall: im vorraus schon mal danke gruß eassy |
Re: Kopieren der Dateien die sich verändert haben
Moin eassy,
hast Du es bei SHFileOperation auch mit Zitat:
Ansonsten kannst Du ja einfach die Attribute der Datei prüfen. Ist Archiv gesetzt wurde die Datei verändert, sonst nicht. Und wenn das Zielverzeichnis nicht existiert schlägt CopyFile fehl. Das kann aber vorher mit ForceDirectories (unit Filectrl in D5) angelegt werden. Du könntest auch das Verzeichnis auf Änderungen hin überwachen ( ![]() ![]() |
Re: Kopieren der Dateien die sich verändert haben
hi chris,
nein, das habe ich noch nicht probiert. wenn ich die attribute der dateien überprüfen möchte, könntest du mir sagen wie das in delphi gemacht wird. warum wird eigentlich bei folgendem code ein verzeichnis und keine datei (test02102003.txt) angelegt: sondern im verzeichnis ist dann test.txt...
Delphi-Quellcode:
ShellFileOperation('c:test.txt','c:\server\test' + formatdatetime('ddmmyyyy',now)+ '.txt', FO_COPY); procedure TfrmGUIForm.ShellFileOperation(fromFile, toFile: String; Flags: Integer); var shellinfo: TSHFileOpStructA; begin with shellinfo do begin wnd := Application.Handle; wFunc := Flags; pFrom := PChar(fromFile); pTo := Pchar(toFile); end; SHFileOperation(shellinfo); end; gruß eassy |
Re: Kopieren der Dateien die sich verändert haben
Moin eassy,
weil bei FO_COPY der pTo Parameter das Zielverzeichnis angibt in das pFrom kopiert werden soll. Willst Du es anders haben könntest Du die Datei erst kopieren und dann umbenennen. Um die Attribute auszulesen kannst Du ![]() ![]() |
Re: Kopieren der Dateien die sich verändert haben
guten morgen,
gibt es eigentlich keine andere möglichkeit, schon während dem kopieren den zieldateinamen zu ändern? ich hänge da total fest. ich bin um jede hilfe dankbar... gruß eassy :cry: |
Re: Kopieren der Dateien die sich verändert haben
Moin...
Klar gibts die... Diese Funktion stammt aus einem Buch. Du gibst unter 'von' und 'nach' den absoluten Pfad mit Dateinamen an. Umbenennen also möglich, denke ich. Relativer Pfad sollte auch möglich sein, allerdings würde ich dann sicherstellen, dass dein Arbeitsverzeichnis auch stimmt...
Delphi-Quellcode:
Vielleicht hilft dir das weiter.
// Einfache Kopierfunktion
function CopyFile(von, nach: string):Boolean; var source, drain: TFileStream; begin Result:=false; source:=TFileStream.Create(von, fmOpenRead); try drain:=TFileStream.Create(nach, fmOpenWrite or fmCreate); except source.Free; Exit; end; try drain.CopyFrom(source, source.Size); except drain.Free; source.Free; Exit; end; drain.Free; source.Free; result:=true; end; Bis denne... |
Re: Kopieren der Dateien die sich verändert haben
Sinniger wäre es IMHO die Standardfunktion CopyFile zu nutzen.
|
Re: Kopieren der Dateien die sich verändert haben
Moin...
In meiner Hilfe steht zu CopyFile nix drin, und in meiner Literaur (ein 1k-Seiten Wälzer), aus der ich diese Funktion habe, steht: "gibts nicht, sowas..." Zitat:
|
Re: Kopieren der Dateien die sich verändert haben
Du solltest Dir die Win32 Programmers Reference (etc.) installieren
Zitat:
|
Re: Kopieren der Dateien die sich verändert haben
Mohoin...
Wuhaaaa... Ja, das sieht mir auch schon schwer nach C-Syntax aus... :shock: Okay, hast recht... Aber bis dahin finde ich meine Lösung doch besser - weil einfach faul... :roll: Bis denne... |
Re: Kopieren der Dateien die sich verändert haben
Moin Tonic,
leider hat Deine Lösung nicht zu unterschätzende Nachteile: Weder die Datei, noch die Sicherheitsattribute werden mitkopiert. Bei CopyFile sind's dann nur noch die Sicherheitsattribute. Ausserdem kann man mit SHFileOperation durchaus die Dateien mit einem neuen Namen kopieren. Als Flag wird zusätzlich FOF_MULTIDESTFILES angegeben, und im Parameter pTo wird eine Liste der neuen Namen angegeben. Diese Liste muss natürlich genauso lang sein, wie die in pFrom. |
Re: Kopieren der Dateien die sich verändert haben
Warum eigentlich nicht mit einfachen Funktionen?
Man erstellt erst aus dem Quell- und Zielverzeichnis je eine Liste der Dateien. Die Listen abgleichen. Dateien im Quellverzeichnis, die nicht im Zielverzeichnis sind werden kopiert, da sie neu sind. Bei den Dateien die in beiden Listen sind das Modification Date vergleichen. Ist das der Quelldatei groesser dann wurde sie veraendert und muss kopiert werden. Die Jedi Code Library ![]() Zum Kopieren kann man CopyFile benutzen. Die Sicherheitsattribute sollte man kopieren koennen indem man erst die Zieldatei mit einem CreateFile anlegt und dabei die Quelldatei als Template angibt. Dann gleich wieder zumachen und CopyFile sollte dann die Sicherheitsattribute unbeschaedigt lassen. Noetigenfalls erst die Zieldatei loeschen, um eventuell geaenderte Sicherheitsattribute zu kopieren. |
Re: Kopieren der Dateien die sich verändert haben
Moin...
[Persönliche Meinung] Das mit den Rechten ist ja Okay... Aber die sollte man, wenns wirklich drauf an kommt, eh separat prüfen. Es ist ja durchaus möglich, dass das Zielverzeichnis schon Rechte hat (oder eben nicht hat) die im Quellverzeichnis gesetzt sind (oder eben nicht). Es kommt halt drauf an (wie immer eigentlich) was man damit machen will... Ich bin mit dieser Methode bislang ganz gut gefahren und kann sie allen, Neueinsteigern wie Profis, nur empfehlen. Warum 'zig Attribute Prüfen wenn das Resultat eh egal ist. Kostet doch nur Performance. Sicher, wenn es wichtig ist, dass nur der Admin oder Root Zugriff auf diese Datei hat (oder wer auch immer) muss man einen Weg finden das zu realisieren. Ich bin mir sicher, dass es da einen Weg gibt. Ob der dann allerdings besser als die Standard-Funktion ist muss sich dann zeigen. [/Persönliche Meinung] bis denne... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:00 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