Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-08-2012
jonydread jonydread is offline
Miembro
NULL
 
Registrado: nov 2011
Posts: 157
Poder: 13
jonydread Va por buen camino
error copiando multiples archivos

amigos necesito copiar varios archivos pero busque aca en el foro y en google y no entiendo muy bien salen ejemplos de copiar carpetas completas solamente y yo necesito copiar solo ciertos archivos seleccionados en fin este es el codigo que encontre
Código Delphi [-]
function CopiaTodo(Origen,Destino : String) :
 LongInt;
 var
 F : TShFileOpStruct;
 sOrigen, sDestino : String;
 begin 
 Result := 0;
 sOrigen := Origen + #0;
 sDestino := Destino + #0;

 with F do
 begin
 Wnd := Application.Handle;
 wFunc := FO_COPY;
 pFrom := @sOrigen[1];
 pTo := @sDestino[1];
 fFlags := FOF_MULTIDESTFILES;
 end;
 Result := ShFileOperation(F);
 end;
lo aplico asi
Código Delphi [-]
procedure TForm1.Button2Click(Sender: TObject);
var
i : integer;
origen, destino: string;
begin
for i:= 0 to Opendialog1.Files.Count-1 do
origen:= opendialog1.Files[i];
destino:=extractfilepath(opendialog1.Files[i]);
CopiaTodo(origen, destino);

end;

me dice stringlisterror - list index out of bounds()

como podria hacerlo??
Responder Con Cita
  #2  
Antiguo 11-08-2012
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Prueba así:

Código Delphi [-]
function FCopy(Handle: HWND; From, Dest: String): integer;
var
  FS: SHFILEOPSTRUCT;
begin
  ZeroMemory(@FS, sizeof(SHFILEOPSTRUCT));
  FS.wnd:= Handle;
  FS.wFunc:= FO_COPY;
  FS.pFrom:= PCHAR(From + #0#0);
  FS.pTo:=   PCHAR(Dest + #0#0);
  FS.fFlags:= FOF_NOCONFIRMATION;
  Result:= SHFileOperation(FS);
end;

Ejemplo de uso:
Código Delphi [-]
FCopy(Handle, 'D:\Cazador\*.*', 'D:\Cazador2\otra');
Se copian todos los archivos de la carpeta D:\Cazador a la carpeta D:\Cazador2\otra si no existe la carpeta la crea.

Saludos.

Última edición por escafandra fecha: 11-08-2012 a las 18:21:11.
Responder Con Cita
  #3  
Antiguo 11-08-2012
jonydread jonydread is offline
Miembro
NULL
 
Registrado: nov 2011
Posts: 157
Poder: 13
jonydread Va por buen camino
Cita:
amigos necesito copiar varios archivos pero busque aca en el foro y en google y no entiendo muy bien salen ejemplos de copiar carpetas completas solamente y yo necesito copiar solo ciertos archivos seleccionados
amigo no necesito copiar una carpeta necesito copiar algunos archivos seleccionados, dada la ruta en un listview probe con copyfile pero solo copia uno y necesito hacer una copia de multiples archivos

gracias por la ayuda!!
Responder Con Cita
  #4  
Antiguo 11-08-2012
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Perdona, no te entendí bien. Tu quieres pasar una lista de múltiples archivos a copiar en una carpeta...

En ese caso quizás te interese la solución que propuse aquí.



Saludos.
Responder Con Cita
  #5  
Antiguo 11-08-2012
jonydread jonydread is offline
Miembro
NULL
 
Registrado: nov 2011
Posts: 157
Poder: 13
jonydread Va por buen camino
ya habia visto ese mensaje pero no se porque no me funciona lo aplico asi
Código Delphi [-]
uses shellapi
procedure CreatePath(Path: string);
var
  l, fin: integer;

begin
   l:= Length(Path);
   fin:= 0;
   repeat
     if (Path[fin] = '\') or (l = 0) then

     begin
       if l>0 then Path[fin]:= #0;
       CreateDirectory(PCHAR(Path), 0);
       if l>0 then Path[fin]:= '\';
     end;

     inc(fin); dec(l);
   until (l<0);
end;
function XCopy(Handle: HWND; From: TStrings; Dest: String): integer;
var
  FS: SHFILEOPSTRUCT;
  SFrom: string;
begin

  Result:= -1;
  if(From.Count > 0) or (Dest <> '') then
  begin
    CreatePath(PCHAR(Dest));
    SFrom:= StringReplace(From.Text, #13+#10, #0, [rfReplaceAll]);

    ZeroMemory(@FS, sizeof(SHFILEOPSTRUCT));
    FS.wnd:= Handle;
    FS.wFunc:= FO_COPY;
    FS.pFrom:= PCHAR(SFrom + #0);
    FS.pTo:=   PCHAR(Dest + #0);
    FS.fFlags:= FOF_NOCONFIRMMKDIR or FOF_NOCONFIRMATION;

    Result:= SHFileOperation(FS);
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
i : integer;
origen, destino: string;
begin
for i:= 0 to Opendialog1.Files.Count-1 do
origen:= opendialog1.Files[i];
destino:=extractpath(opendialog1.Files[i]);
 XCopy(Handle, origen, destino);

end;
Responder Con Cita
  #6  
Antiguo 11-08-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is online now
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.057
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿No funciona?
¿Sale algún error?, ¿no copia?, ¿copia lo que no tiene que copiar?, ¿no hace nada? ...
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
Error Con multiples accesos a WebService elcopa Varios 0 30-09-2011 00:59:51
Uno o multiples archivos luis.gutierrez API de Windows 4 06-04-2010 18:51:24
Instalando/Copiando archivos, etc... Xianto Varios 2 09-08-2008 04:17:56
Open dialog y multiples archivos b2k Varios 3 16-09-2007 23:22:37
Copiando archivos cone220 API de Windows 3 23-06-2003 14:43:28


La franja horaria es GMT +2. Ahora son las 10:50:34.


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