Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-03-2012
petete2008 petete2008 is offline
Miembro
 
Registrado: oct 2008
Posts: 109
Poder: 16
petete2008 Va por buen camino
copiar un directorio en otro

Hola :
Supongamos que tengo un directorio origen llamado c:\carpeta (dentro de prueba hay un subdirectorio llamado T1).
Quiero copiar el contenido de c:\carpeta (incluido ficheros y subdirectorios) a la carpeta destino c:\pp (la carpeta pp esta creada previamente manualmente).

El problema que tengo es que con el código siguiente me crea dentro de la carpeta pp otro directorio llamado carpeta y no es lo que deseo. Quiero también que se sobreescriba si algún fichero o carpeta existe dentro del directorio destino sin preguntar.

Código:
// RenameOnCollision : Boolean; //Renames if directory exists
// NoConfirmation : Boolean; //Responds "Yes to All" to any dialogs
// Silent : Boolean; //No progress dialog  is shown
// ShowProgress : Boolean; //displays progress dialog but no file names
// FromDir : String; //From directory, source
// ToDir : String // To directory, source
Function copyDir(RenameOnCollision:Boolean; NoConfirmation:Boolean; Silent:Boolean; ShowProgress:Boolean; FromDir:String; ToDir:String):Boolean;
var
  SHFileOpStruct : TSHFileOpStruct;
  FromBuf, ToBuf: Array [0..255] of Char;
begin
  Try
    Fillchar(SHFileOpStruct, Sizeof(SHFileOpStruct), 0 );
    FillChar(FromBuf, Sizeof(FromBuf), 0 );
    FillChar(ToBuf, Sizeof(ToBuf), 0 );
    StrPCopy(FromBuf, FromDir);
    StrPCopy(ToBuf, ToDir);
    With SHFileOpStruct Do
    Begin
      Wnd := 0;
      wFunc := FO_COPY;
      pFrom := @FromBuf;
      pTo := @ToBuf;
      fFlags := FOF_ALLOWUNDO;
      If RenameOnCollision Then fFlags := fFlags or
        FOF_RENAMEONCOLLISION;
      If NoConfirmation Then fFlags := fFlags or
        FOF_NOCONFIRMATION;
      If Silent Then fFlags := fFlags or
        FOF_SILENT;
      If ShowProgress Then fFlags := fFlags or
        FOF_SIMPLEPROGRESS;
    End;
  Result := (SHFileOperation(SHFileOpStruct) = 0); // it goes wrong here
  Except
    Result := False;
  End;
end;//copyDir
Código:
 copyDir( false, true, false, false, PChar('c:\prueba'), Pchar('c:\pp');
Alguien tiene idea que puede estar pasando?
gracias de antemano!!
Responder Con Cita
  #2  
Antiguo 08-03-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola petete2008.

Probá de este modo:
Código Delphi [-]
uses ShellApi;

function CopyDir(const Source, Target: string): Boolean;
var
  SHFileOpStruct: TSHFileOpStruct;
begin
  ZeroMemory(@SHFileOpStruct, SizeOf(SHFileOpStruct));
  with SHFileOpStruct do
  begin
    wFunc  := FO_COPY;
    fFlags := FOF_FILESONLY;
    pFrom  := PChar(Source + #0);
    pTo    := PChar(Target)
  end;
  Result := (0 = ShFileOperation(SHFileOpStruct));
end;

Llamada de ejemplo:
Código Delphi [-]
  if copyDir('c:\prueba', 'c:\pp') then
    // copia exitosa
  else
    // error

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 08-03-2012 a las 18:57:52.
Responder Con Cita
  #3  
Antiguo 09-03-2012
petete2008 petete2008 is offline
Miembro
 
Registrado: oct 2008
Posts: 109
Poder: 16
petete2008 Va por buen camino
Gracias, al final lo solucione de esta forma

Código:
Procedure Copy1Dir(fromDir, toDir : String);
var
fileOp: TShFileOpStruct;
begin
FillChar(fileOp, Sizeof(TShFileOpStruct), 0);
fromDir := fromDir + '\*.*'#0;
toDir := toDir + #0;
with fileOp do begin
  wnd := Application.Handle;
  wfunc := FO_COPY;
  pFrom := PChar(fromDir);
  pTo := PChar(toDir);
  fFlags := FOF_ALLOWUNDO or FOF_NOCONFIRMATION;
  fAnyOperationsAborted := false;
  hNameMappings := nil;
  lpszProgressTitle := nil;
end;
SHFileOperation(fileOp);
end;
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Copiar la propia aplicación a otro directorio Gothem Varios 2 26-06-2011 22:15:30
Copiar directorio novaten Varios 5 11-01-2011 22:53:04
Copiar directorio y renomer el proyecto Paulao Varios 2 01-07-2008 12:21:34
FileStream pa copiar todo un directorio o carpeta Oxa78 Varios 0 23-03-2007 00:09:39
copiar un archivo a otro directorio scotex Varios 2 19-02-2005 11:27:10


La franja horaria es GMT +2. Ahora son las 10:48:42.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi