10. marts 2003 - 15:07Der er
2 kommentarer og 1 løsning
Kopiering af directory incl. samtlige subdirectories (m. filer)
Jeg leder efter en metode til at kopiere fra et source directory, over til et target directory. Sourcedirektoriet skal oprettes i targetdirectoriet, og samtlige filer og subdirectories fra source kopieres så med over. Det eneste der har givet mig problemer er at få fat i subdirectorierne og så få dem over på target.
procedure TForm1.COPYFolder( src, dest : string );
var sts : Integer ; SR: TSearchRec;
begin sts := FindFirst( src + '*.*' , faAnyFile , SR ); if sts = 0 then begin if ( SR.Name <> '.' ) and ( SR.Name <> '..' ) then begin //Put User Feedback here if desired Application.ProcessMessages; if pos('.', SR.Name) = 0 then begin {$I-}MkDir( dest + SR.Name ) ;{$I+} COPYFolder( src + SR.Name + '\', dest + SR.Name + '\' ) ; end else COPYfile( pchar(src + SR.Name), pchar(dest + sr.name), true ); end; while FindNext( SR ) = 0 do begin if ( SR.Name <> '.' ) and ( SR.Name <> '..' ) then begin //Put User Feedback here if desired Application.ProcessMessages; if Pos('.', SR.Name) = 0 then begin {$I-}MkDir( dest + SR.Name );{$I+} COPYFolder( src + SR.Name + '\', dest + SR.Name + '\' ) ; end else COPYfile( pchar(src + SR.Name), pchar(dest + sr.name), true ); end; end; FindClose( SR ) ; end ; end;
dette kan bruges, mener dog også der er et api kald
Nu har jeg ikke liiige kodet Delphi i 1 års tid, og slet ikke filhåndtering. En mulig fremgangsmåde er, at du finder alle filer i mappen incl. foldere. Hver gang du finder en folder, kalder du din kopi funktion rekursivt.
I Pseudokode ser det således ud.
procedure kopier(start sti, subdir, filmaske, target sti) begin findfirst(start sti, filmaske ...); // kan ikke huske syntaxen. while not (sidste fil/directory) if directory then // dvs. resultatet fra findfirst/next er et directory begin Hvis target sti+directory ikke eksisterer så opret kopier(start sti, directory, filmaske, target sti); end else kopier fil til target sti+directory end; findnext(); end; end;
Du starter kopieringen med at kalde kopier(source, "", filmaske, target)
Nå ... det var der vist andre der havde liggende :-)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.