GARANTIR DESCONTO

Fórum Copiando SubDiretorios #337240

02/02/2007

0

Com a rotina abaixo eu copio todos os arquivos que estão para pasta C:\Origem, para a a pasta C:\Destino.

´
I := FindFirst(PChar(´C:\Origem\*.*´), faAnyFile, VArquivos);
While I = 0 do
begin
if (VArquivos.Attr and faDirectory) <> faDirectory then
begin
CopyFile(PChar(´C:\origem\´+VArquivos.Name), PChar(´C:\Destino\´+VArquivos.Name), true)
end;
I := FindNext(VArquivos);
end;
´

Pergunto: como copio as subpastas e seus arquivos, de C:\Origem para C:\Destino sem ter que fazer o processo pasta por pasta?
Por exemplo, como copiar os arquivos C:\Origem\Subpasta1\ para C:\Destino\Subpasta1\ e C:\Origem\Subpasta1\ SubPasta2 para C:\Destino\Subpasta1\ SubPasta2?

Obrigado


Armindo

Armindo

Responder

Posts

02/02/2007

Emerson Nascimento

crie um procedimento como esse:
procedure CopiarArquivos( Origem, Destino: string );
var
  i: integer;
  VArquivos: TSearchRec;
begin
  if Origem[Length(Origem)] <> ´\´ then
     Origem := Origem + ´\´;

  if Destino[Length(Destino)] <> ´\´ then
     Destino := Destino + ´\´;

  ForceDirectories(ExtractFilePath(Destino));

  i := FindFirst(PChar(Origem+´*.*´), faAnyFile, VArquivos);
  while I = 0 do
  begin
    if (VArquivos.Name <> ´.´) and (VArquivos.Name <> ´..´) then
    begin
      CopyFile(PChar(Origem+VArquivos.Name), PChar(Destino+VArquivos.Name), true);

      if ((VArquivos.Attr and faDirectory) <> 0)  then
        CopiarArquivos( Origem+VArquivos.Name, Destino+VArquivos.Name );
    end;

    I := FindNext(VArquivos);
  end;
end;


e chame assim:
CopiarArquivos(´C:\Origem´,´C:\Destino´);


Responder

Gostei + 0

03/02/2007

Armindo

crie um procedimento como esse:
procedure CopiarArquivos( Origem, Destino: string );
var
  i: integer;
  VArquivos: TSearchRec;
begin
  if Origem[Length(Origem)] <> ´\´ then
     Origem := Origem + ´\´;

  if Destino[Length(Destino)] <> ´\´ then
     Destino := Destino + ´\´;

  ForceDirectories(ExtractFilePath(Destino));

  i := FindFirst(PChar(Origem+´*.*´), faAnyFile, VArquivos);
  while I = 0 do
  begin
    if (VArquivos.Name <> ´.´) and (VArquivos.Name <> ´..´) then
    begin
      CopyFile(PChar(Origem+VArquivos.Name), PChar(Destino+VArquivos.Name), true);

      if ((VArquivos.Attr and faDirectory) <> 0)  then
        CopiarArquivos( Origem+VArquivos.Name, Destino+VArquivos.Name );
    end;

    I := FindNext(VArquivos);
  end;
end;
e chame assim: CopiarArquivos(´C:\Origem´,´C:\Destino´);


Mas essa é a mesma rotina que eu postei, ou seja, ela serve para copiar arquivos de um diretório. Essa rotina serve para copiar de C:\teste para C:\novapasta, mas, para copiar os arquivos de C:\teste para c:\novapasta e, na mesma rotina, copiar de c:\teste\subpasta para c:\nova pasta\subpasta, não funciona.
O que eu preciso é copiar os arquivos de um diretório e também as subpastas desse diretório.


Responder

Gostei + 0

03/02/2007

Emerson Nascimento

só uma pergunta: [size=18:d7dce647fd]você testou?[/size:d7dce647fd]


Responder

Gostei + 0

03/02/2007

Emerson Nascimento

procedure CopiarArquivos( Origem, Destino: string ); 
var 
  i: integer; 
  VArquivos: TSearchRec; 
begin 
  if Origem[Length(Origem)] <> ´\´ then 
     Origem := Origem + ´\´; 

  if Destino[Length(Destino)] <> ´\´ then 
     Destino := Destino + ´\´; 

  ForceDirectories(ExtractFilePath(Destino)); 

  i := FindFirst(PChar(Origem+´*.*´), faAnyFile, VArquivos); 
  while I = 0 do 
  begin 
    if (VArquivos.Name <> ´.´) and (VArquivos.Name <> ´..´) then 
    begin 
      CopyFile(PChar(Origem+VArquivos.Name), PChar(Destino+VArquivos.Name), true); 

      if ((VArquivos.Attr and faDirectory) = faDirectory)  then 
        CopiarArquivos( Origem+VArquivos.Name, Destino+VArquivos.Name ); 
    end; 

    I := FindNext(VArquivos); 
  end; 
end;



Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar