Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Cómo copiar un archivo (https://www.clubdelphi.com/foros/showthread.php?t=62846)

PallyRS 16-01-2009 18:49:20

Cómo copiar un archivo (Solucionado)
 
Hola Foro:

Quisiera saber como permitir que los usuarios cuando accionen un botón se copie solamente un fichero determinado, digamos fichero.zip, hacia el lugar que ellos decidan.

Cuando el cuadro de dialogo Open me habre el fichero no se copia.

Gracias.

dec 16-01-2009 18:52:42

Hola,

Una cosa es abrir el cuadro de diálogo que permita a los usuarios escoger un archivo, y otra copiarlo. Mediante el diálogo "TOpenFile" puedes dar a elegir la ruta del archivo a copiar, y con el diálogo "TSaveFile" podrá determinarse la ruta del archivo de destino. Sin embargo, al final tendrás que usar una función como "CopyFile()" o "CopyFileEx()", una vez tengas las rutas de origen y de destino. Si tienes alguna duda hazla saber. ;)

PallyRS 16-01-2009 20:58:09

Hola dec y al Foro

Pues algo aqui no me funciona, mira lo que tengo:

Código Delphi [-]
if SaveDialog.Execute then
     begin
       CopyFile('C:\EmpreQuiN\Mesaprueba\MesaPrueba.zip',SaveDialog.Files);

¿Cómo es que debe quedar para que funcione?

Gracias

dec 16-01-2009 21:11:30

Hola,

Si lo haces como dices, debes obtener un error, y, el mismo mensaje de error te estará diciendo algo. Es bien referir los mensajes de errores aquí, cuando preguntamos algo, puesto que esto ayuda a obtener una posible solución. En este caso al menos se trata de que el segundo parámetro de la función "CopyFile" ha de ser del tipo "PChar", y tú estás pasando una propiedad del diálogo que es del tipo "TStrings".

Lo siguiente igual te ayuda a hacerte una idea. Inicia un nuevo proyecto en Delphi, sitúa un botón en el formulario, y, en su "onclick", copia este código, que, podrá y aun deberá refinarse lo que se quiera, pero, ya digo, igual puede valer para hacerte una idea:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  target, destiny: PChar;
begin
  with TOpenDialog.Create(nil) do
  begin
    Title := 'Elige el archivo a copiar';
    try
      if Execute() then begin
        target := PChar(FileName);
        with TSaveDialog.Create(nil) do
        begin
          FileName := target;
          Title := 'Elige dónde copiar el archivo';
          try
            if Execute() then begin
              destiny := PChar(FileName);
              if CopyFile(target, destiny, false) then
                ShowMessage('El archivo se copió correctamente')
              else
                ShowMessage('Ops... no pudo copiarse el archivo');
            end;
          finally
            Free();
          end;
        end;
      end;
    finally
      Free();
    end;
  end;
end;

Bpascal 17-01-2009 02:05:17

Cita:

Pues algo aqui no me funciona, mira lo que tengo:
CopyFile('C:\EmpreQuiN\Mesaprueba\MesaPrueba.zip',SaveDialog.Files);
deves usar savedialog.filename envez de savedialog.files:

CopyFile('C:\EmpreQuiN\Mesaprueba\MesaPrueba.zip',SaveDialog.FILENAME);

dec 17-01-2009 03:23:40

Hola,

Cita:

Empezado por Bpascal
deves usar savedialog.filename envez de savedialog.files:

CopyFile('C:\EmpreQuiN\Mesaprueba\MesaPrueba.zip',SaveDialog.FILENAME);

¡Eso ya lo he dicho yo! :rolleyes: ;) :) :D

PallyRS 20-01-2009 13:42:04

Hola dec, Bpascal & Foro

Gracias por sus respuestas, todas las variantes que probé resultaron correcta, pero aún sigo con la duda....

Con el dialogo de seleccionar ficheros, los usuarios pueden seleccionarme cualquiera. ¿Se podría programar para que solamente apareciaera el Dialogo de Salvar y copiar un fichero determinado?

Gracias

PallyRS 20-01-2009 14:16:34

Hola Foro:

Gracias a todos, ya solucione el problema. Me ha quedado así.

Código Delphi [-]
procedure TFSalva.DelButClick(Sender: TObject);
var
  Fichero, Copiar: PChar;
begin
  Fichero:='C:\Archivos de programa\EmpreQuiN\MesaPrueba\Datos\MesaPrueba.zip';
  if SaveDialog.Execute then
     begin
       Copiar:=Pchar(SaveDialog.FileName);
       CopyFile(Fichero,Copiar,True);
       ShowMessage('Fichero copiado con exito');
     end;
end;

Lo copié por si le sirve a alguien, y gracias a dec y BPascal


La franja horaria es GMT +2. Ahora son las 00:42:53.

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