Jump to content

Recommended Posts

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:

Share this post


Link to post

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;

Share this post


Link to post

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

×
×
  • Create New...