Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Kopiranje direktorijuma sa poddirektorijumima

[es] :: Pascal / Delphi / Kylix :: Kopiranje direktorijuma sa poddirektorijumima

[ Pregleda: 806 | Odgovora: 7 ]

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

MatezYU
NS

Član broj: 4114
Poruke: 896
*.13.eunet.yu.

Sajt: www.matezyu.byethost6.com


Profil

icon Kopiranje direktorijuma sa poddirektorijumima10.12.2004. u 12:27

Kako mogu u delphiju da kopiram jedan direktorijum koji je pun poddirektorijuma na neko drugo mesto, radi backup-a podataka?
10.12.2004. u 12:27 

sasas
Saša Slavnić
looking for...
Na lepom plavom Dunavu

Član broj: 35478
Poruke: 611
*.zaslon-telecom.si.



Profil

icon Re: Kopiranje direktorijuma sa poddirektorijumima10.12.2004. u 12:59
Ovo bi ti uradilo posao:

Code:

procedure TMyForm.GetFiles(dir:string);
var
  F: TSearchRec;
begin
  if FindFirst(dir + '*.*', faAnyFile, F) = 0 then
  begin
    repeat
      application.ProcessMessages; //da program ne ostane 'zaledjen'

      if (F.Attr = faDirectory) and (f.Name[1] <> '.') 
        then GetFiles(dir + F.Name + '\');

      ListBox1.Items.Add(dir + F.Name);  // ovde mozes ubaciti CopyFile 
    until FindNext(F) <> 0;
    FindClose(F);
  end;
end;


Sad, da li postoji nesto elegantnije...

ss.
When something is hard to do, then it's not worth doing.
10.12.2004. u 12:59 

bancika
Branislav Stojkovic
Nis, New York

Član broj: 24844
Poruke: 620
*.vdial.verat.net.

ICQ: 84215453
Sajt: www.storm-software.co.yu/..


Profil

icon Re: Kopiranje direktorijuma sa poddirektorijumima10.12.2004. u 13:51
mislim da ima...preko API-ja, dobijes i onaj windowsov Copy dijalog :)

Code:

uses ShellAPI;
...
function WinCopy(Owner: Integer; FromFile, ToFile: String; RenameOnCollision: boolean = False; Confirm: boolean = False): Boolean;
var
  Struct : TSHFileOpStructA; 
  MultDest: boolean; 
begin 
  FillChar(Struct, SizeOf(Struct), 0); MultDest:=pos(';',ToFile)>0; 
  While pos(';',FromFile)>0 do 
    FromFile[pos(';',FromFile)]:=#0; 
  While pos(';',ToFile)>0 do 
    ToFile[pos(';',ToFile)]:=#0; 
  FromFile:=FromFile+#0#0; 
  ToFile:=ToFile+#0#0; 
  with Struct do 
    begin 
      wnd         :=Owner; 
      wFunc       :=FO_Copy; 
      pFrom       :=PChar(FromFile); 
      pTo         :=PChar(ToFile); 
      fFlags:=FOF_ALLOWUNDO or FOF_FILESONLY; 
      If MultDest then 
        fFLags:=fFlags or FOF_MULTIDESTFILES; 
      If RenameOnCollision then 
        fFLags:=fFlags or FOF_RENAMEONCOLLISION; 
      If not Confirm then 
      begin 
        fFLags:=fFlags or FOF_NOCONFIRMATION or FOF_NOCONFIRMMKDIR; 
      end;
      hNameMappings:=nil;
      lpszProgressTitle:=nil; 
    end; 
  Result:=(SHFileOperationA(Struct)=0) and (not Struct.fAnyOperationsAborted);
end;


upotreba ide ovako:

Code:

   WinCopy(Application.Handle, 'c:\folder1', 'c:\folder2'); //ovo confirm je za potvrdu overwrite-a


pozdravi
Ride the rainbow, crack the sky
10.12.2004. u 13:51 

sasas
Saša Slavnić
looking for...
Na lepom plavom Dunavu

Član broj: 35478
Poruke: 611
*.zaslon-telecom.si.



Profil

icon Re: Kopiranje direktorijuma sa poddirektorijumima10.12.2004. u 14:12
U smislu elegancije, malo preradjeno ShellAPI resenje (danas sam bas zaludan, a? ) Inace, meni licno se vise dopada ffirst/fnext resenje, jer je portabilno - radi i pod dos-om provereno.

ss.

Code:

function DirCopy(FromPath, ToPath: string; Overwrite: Boolean): Boolean;
var
  fos: TSHFileOpStruct;
begin
  FillChar(fos, SizeOf(fos), #0);

  fos.Wnd := 0;
  fos.wFunc := FO_COPY;

  fos.pFrom := PChar(FromPath + #0);
  fos.pTo := PChar(ToPath + #0);

  if Overwrite then
    fos.fFlags := FOF_SILENT // ako zelimo prikaz progresa, FOF_SIMPLEPROGRESS
  else
    fos.fFlags := FOF_RENAMEONCOLLISION or FOF_SIMPLEPROGRESS;

  fos.fAnyOperationsAborted := False;
  fos.hNameMappings := nil;
  Result := (ShFileOperation(fos) = 0);
end;

When something is hard to do, then it's not worth doing.
10.12.2004. u 14:12 

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1401
195.252.80.*

ICQ: 246436949


Profil

icon Re: Kopiranje direktorijuma sa poddirektorijumima10.12.2004. u 15:23
Ako ti stvarno treba ova funkcija za backup bilo bi jos bolje resenje da ne kopiras nego da zapakujes direktorijum, zar ne? :)
DirectX na srpskom | GLScene na srpskom

There are only 10 types of people in this world; those who understand binary and those who don't.
10.12.2004. u 15:23 

bancika
Branislav Stojkovic
Nis, New York

Član broj: 24844
Poruke: 620
*.vdial.verat.net.

ICQ: 84215453
Sajt: www.storm-software.co.yu/..


Profil

icon Re: Kopiranje direktorijuma sa poddirektorijumima10.12.2004. u 16:16
a ako hoces za cele drajvove mozes da pravis image fajlove ovako:

Code:

procedure ImageDisk; 
var 
InF, OutF: THandle; 
Buffer: array [1..(1024 * 64)] of Byte; // 64kb buffer 
BufRead, BufWrote: DWORD; 
begin 
InF := CreateFile('\\.\A:',GENERIC_READ,FILE_SHARE_READ,nil,OPEN_EXISTING,0,0); 

OutF := CreateFile('DISK.IMG',GENERIC_WRITE,FILE_SHARE_READ,nil,CREATE_ALWAYS,0,0); 

BufRead := 1; 

  while (ReadFile(InF,Buffer,SizeOf(Buffer),BufRead,nil) = True) and 
        (BufRead <> 0) do 
   begin 
    WriteFile(OutF,Buffer,BufRead,BufWrote,nil); 
   end; 

CloseHandle(OutF); 
CloseHandle(InF); 
end; 

procedure RestoreImage; 
var 
InF, OutF: THandle; 
Buffer: array [1..(1024 * 64)] of Byte; // 64kb buffer 
BufRead, BufWrote: DWORD; 
begin 
InF := CreateFile('DISK.IMG',GENERIC_READ,FILE_SHARE_READ,nil,OPEN_EXISTING,0,0); 

OutF := CreateFile('\\.\A:',GENERIC_WRITE,FILE_SHARE_READ,nil,OPEN_EXISTING,0,0); 

if GetFileSize(OutF,nil) < GetFileSize(InF,nil) then 
  begin 
   CloseHandle(InF); 
   CloseHandle(OutF); 
   Exit; 
  end; 

BufRead := 1; 

while (ReadFile(InF,Buffer,SizeOf(Buffer),BufRead,nil) = True) and 
  (BufRead <> 0) do 
   begin 
    WriteFile(OutF,Buffer,BufRead,BufWrote,nil); 
   end; 

CloseHandle(OutF); 
CloseHandle(InF); 
end; 

Ride the rainbow, crack the sky
10.12.2004. u 16:16 

morlic
Milos Orlic
Beograd

Moderator
Član broj: 6081
Poruke: 723
*.111.eunet.yu.



Profil

icon Re: Kopiranje direktorijuma sa poddirektorijumima12.12.2004. u 11:22
Ono prvo resenje sa sistemskom funkcijom je najbolje. Funkcije FindFirst i ostale ne podrzavaju unicode nazive foldera i fajlova (sto danas nije nikakvo cudo), tako da kada budu naleteli na takve fajlove bice tesno. Mislim da se meni cak desilo od ranije da sam imao problem sa fajlom koji ima znak pitanja u nazivu. Total Commander je tek od verzije 6 dobio podrsku za takve nazive.
12.12.2004. u 11:22 

Riste Pejov
Team Leader/Senior Software Developer @ Ein-Sof ltd S..
Skopje, Macedonia

Član broj: 128
Poruke: 571
217.16.77.*

Jabber: richie@bagra.net.mk
ICQ: 154236769
Sajt: riste.softver.org.mk


Profil

icon Re: Kopiranje direktorijuma sa poddirektorijumima14.12.2004. u 11:42
Pitanje:
'\\.\A:' je direktan pristup A: drajvu ?

to mu je kao pandan /dev/fd0 ?
Ima negde na netu kako su imena C: drajva ili celog harddiska ?
People who think they know everything tend to irritate those of us who do.
14.12.2004. u 11:42 

[es] :: Pascal / Delphi / Kylix :: Kopiranje direktorijuma sa poddirektorijumima

[ Pregleda: 806 | Odgovora: 7 ]

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.