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

Kopiranje direktorijuma sa poddirektorijumima

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

[ Pregleda: 3241 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

MatezYU

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



+17 Profil

icon Kopiranje direktorijuma sa poddirektorijumima10.12.2004. u 12:27 - pre 235 meseci
Kako mogu u delphiju da kopiram jedan direktorijum koji je pun poddirektorijuma na neko drugo mesto, radi backup-a podataka?
 
Odgovor na temu

sasas
Saša Slavnić
radim za neke švabe

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



Profil

icon Re: Kopiranje direktorijuma sa poddirektorijumima10.12.2004. u 12:59 - pre 235 meseci
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.
 
Odgovor na temu

bancika
Branislav Stojkovic

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

Sajt: www.diy-fever.com


+1 Profil

icon Re: Kopiranje direktorijuma sa poddirektorijumima10.12.2004. u 13:51 - pre 235 meseci
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

DIY gitare, pojacala i efekti www.diy-fever.com
 
Odgovor na temu

sasas
Saša Slavnić
radim za neke švabe

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



Profil

icon Re: Kopiranje direktorijuma sa poddirektorijumima10.12.2004. u 14:12 - pre 235 meseci
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.
 
Odgovor na temu

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
195.252.80.*

ICQ: 246436949


+10 Profil

icon Re: Kopiranje direktorijuma sa poddirektorijumima10.12.2004. u 15:23 - pre 235 meseci
Ako ti stvarno treba ova funkcija za backup bilo bi jos bolje resenje da ne kopiras nego da zapakujes direktorijum, zar ne? :)
 
Odgovor na temu

bancika
Branislav Stojkovic

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

Sajt: www.diy-fever.com


+1 Profil

icon Re: Kopiranje direktorijuma sa poddirektorijumima10.12.2004. u 16:16 - pre 235 meseci
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

DIY gitare, pojacala i efekti www.diy-fever.com
 
Odgovor na temu

morlic
Milos Orlic
Beograd

Član broj: 6081
Poruke: 735
*.111.eunet.yu.



+1 Profil

icon Re: Kopiranje direktorijuma sa poddirektorijumima12.12.2004. u 11:22 - pre 235 meseci
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.
 
Odgovor na temu

Riste Pejov
Team Leader/Senior Software Developer @
Ein-Sof ltd Skopje
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 - pre 235 meseci
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.
 
Odgovor na temu

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

[ Pregleda: 3241 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

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