Gå til innhold

Anbefalte innlegg

Har prøvd i uker nå og få til og kopiere ei mappe med innhold men
får det ikkje til ! :scared:

Noen som kan hjelpe meg med dette "problemet"??
Eg vil at kvar gong det kommer ei ny fil i mappa blir den sikkerhets koppiert,
kan noen gi exempler på dette?

Takker for hjelp :w00t: :thumbup:
Lenke til kommentar
Videoannonse
Annonse

Dette funker hos meg. Hvis du ser på den, så har jeg lagt inn callback funksjon - slik at jeg kan få tilbakemelding når hver fil eller mappe blir kopiert - jeg bare definerer privat procedure på formen jeg kaller dette fra hvor jeg kan, for eksempel, endre tekst på label for å vise hvilken fil/mappe blir kopiert nå.

 

Koden er ikke helt optimal, det mangler bl. a. mulighet til å ikke angi callback funksjonen (if assigned ... ), men du kan bare slette alle referanser til den hvis du ikke trenger den.

 

type TCopyCallbackFunc = procedure(AName:String) of object;
function CopyDir(ASourceDir,ADestDir:String;ACallback:TCopyCallbackFunc):Boolean;
function CopyAFile(const ASourceFile:String; const ADestFile:String):Boolean;

....
implementation

function CopyAFile(const ASourceFile:String; const ADestFile:String):Boolean;
begin
 Result:=CopyFile(PChar(ASourceFile), PChar(ADestFile),False);
end;

function CopyDir(ASourceDir,ADestDir:String;ACallback:TCopyCallbackFunc):Boolean;
var
 SR:TSearchRec;
 FindRes:Integer;
begin
 Result:=False;
 if not(DirectoryExists(ASourceDir)) then
   Raise Exception.CreateFmt('Source dir %s does not exist',[ASourceDir]);
 ACallback(ADestDir);
 if ((copy(ASourceDir,length(ASourceDir),1)='.') or (copy(ASourceDir,length(ASourceDir)-1,2)='..')) then
 begin
   Result:=True;
   Exit;
 end;
 ASourceDir:=IncludeTrailingBackslash(ASourceDir);
 ADestDir:=IncludeTrailingBackslash(ADestDir);
 ForceDirectories(ADestDir);
 FindRes:=FindFirst(ASourceDir+'*.*',faAnyFile,SR);
 try
   while FindRes=0 do
   begin
     if HasAttr(ASourceDir+SR.Name,faDirectory) then
       CopyDir(ASourceDir+SR.Name, ADestDir+SR.Name, ACallback)
     else
       try
         ACallback(ADestDir+SR.Name);
         CopyAFile(ASourceDir+SR.Name,ADestDir+SR.Name);
       except
         on e:exception do
         begin
           Result:=False;
           exit;
         end;
       end;
     FindRes:=FindNext(SR);
   end;
 finally
   SysUtils.FindClose(SR);
 end;
end;

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...