PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Backup mit Delphi



panzi
02-07-2002, 10:57
Hi

Ich muss in Delphi ein kleines Programm schreiben, welches im Hintergrund folgendes macht:
Einlesen einer Konfigurationsdatei in der 2 Verzeichnise vermekt sind.
Kopieren aller Datein und Ordner (wohl rekursiv zu lösen) des Verzeichnis 1 sollen in ein neues Verzeichnis (unter Verz. von Verz. 2 mit Namen: "Verz. 1 Datum") kopiert werden.

Ich weiß, mit einen shell script währ das in null komma nichts gelöst (bischen mehr als so: cp -r $in/* $out/name-`date`), nur dumm das ich hier in der Arbeit auf einen Win98 Rechner sitze wo nur Delphi installiert ist, und da Delphi doch gleich Kylix ist, dacht ich mir, hier kann mir wer helfen ;-) (hab' näml. NULL Ahnung von Delphi, nur etwas C/C++, VB von der Schule her und Java)

DANKE schon mal im voraus.

peschmae
02-07-2002, 12:05
mit ner batch - datei sollte das doch auch irgendwie zu lösen sein!

MFG Peschmä

(Sind allerdings recht primitiv)

panzi
02-07-2002, 12:23
Und wie kopier ich unter DOS ein Verzeichnis rekursiv?
copy /? sagt folgendes:
Kopiert Dateien an eine andere Position.

COPY [/A | /B] Quelle [/A | /B] [+ Quelle [/A | /B] [+ ...]] [Ziel
[/A | /B]] [/V] [/Y | /-Y]

Quelle Bezeichnet die zu kopierenden Dateien.
/A Bezeichnet eine ASCII-Textdatei.
/B Bezeichnet eine Binärdatei.
Ziel Bezeichnet Verzeichnis bzw. Dateiname der neuen Datei(en).
/V Prüft, ob die neuen Dateien fehlerfrei geschrieben wurden.
/Y Deaktiviert die Bestätigungsaufforderung beim Überschreiben
von vorhandenen Zieldateien.
/-Y Fordert zur Bestätigung beim Überschreiben von
vorhandenen Zieldateien auf.

Die Option /Y kann in der Umgebungsvariablen COPYCMD definiert werden.
Die Einstellung kann in der Befehlszeile mit /-Y deaktiviert werden.

Zum Zusammen führen von Dateien geben Sie eine Datei als Ziel und
mehrere Dateien als Quelle an (unter Verwendung von Platzhaltern
oder im Format Datei1+Datei2+Datei).

anda_skoa
02-07-2002, 13:11
xcopy quelle ziel /s

Ciao,
_

panzi
02-07-2002, 13:19
Super!!!
Und wie lös ich das mit'n Datum?

peschmae
03-07-2002, 11:02
keine ahnung, ich glaube kaum, dass du hier einen Dos - Batch Programmierer finden wirst. Die sind zum glück am aussterben :-)

vielleicht versuchst dus doch besser mit ner bash für windows
http://www.linux-user.de/ausgabe/2000/06/012-migration-windows/012-migration-windows.html?print=y

oder mit VBScript d.h. dem Windows Scripting Host, aber da musst du dich natürlich zuerst auch einarbeiten...

MFG Peschmä

Mattburger
04-07-2002, 12:02
Hi @

Batchdatei funktioniert zwar, laeuft jedoch bei WIN32 eher im "Emulationsmodus". Besser ist hier die WIN32 API für das Kopieren (verschieben geht auch) zu verwenden. Es kommen dann auch die animierten Kopierbildchen und das ganze geht schneller.

Der folgende Code sollte helfen. Zumindest unter Delphi 6. Bei Problemen einfach nochmal melden.




uses
windows, sysutils, graphics, classes, Controls, forms, StdCtrls, comctrls, ExtCtrls,
ShellAPI, JPEG;
========


function DoFileWork( aWnd: HWND; aOperation: UINT;
aFrom, aTo: TStrings; aFlags: FILEOP_FLAGS ): Integer;
var
I: Integer;
FromPath, ToPath: string;
SHFileOpStruct: TSHFileOpStruct;
begin
FromPath := '';
for I := 0 to aFrom.Count - 1 do
FromPath := FromPath + aFrom.Strings[I] + #0;
FromPath := FromPath + #0;

if Assigned(aTo) then
begin
ToPath := '';
for I := 0 to aTo.Count - 1 do
ToPath := ToPath + aTo.Strings[I] + #0;
ToPath := ToPath + #0;
end;

with SHFileOpStruct do
begin
Wnd := aWnd;
wFunc := aOperation;
pFrom := PChar(FromPath);
if Assigned(aTo) then
begin
pTo := PChar(ToPath)
end else begin // target available
pTo := nil;
end; // target not available
fFlags := aFlags;
end; // structure
Result := SHFileOperation(SHFileOpStruct);
end;


procedure tExecuteWeb.copies;
var i: integer;
slQ,slT: TStringList;
begin
t('process copies');
slQ:= TStringList.create;
slT:= TStringList.create;
for i:= 0 to fCopies.count-1 do
slQ.add( fWorkPath+'\'+fCopies[i] );
slT.add( fOutputPath);
DoFileWork( application.Handle, FO_COPY,
slQ, slT, FOF_NOCONFIRMATION );
slQ.free;
slT.free;
end;

;)