Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Copiar archivos Servidor-Cliente (https://www.clubdelphi.com/foros/showthread.php?t=96589)

javier14 07-02-2024 15:42:02

Copiar archivos Servidor-Cliente
 
Tengo un procedimiento para copiar archivos desde un servidor a un cliente. Los archivos se copian bien en mi carpeta de destino pero siempre me salta la excepción del ShowMessage con 'Invalid Pointer Operation'.
archivoOrigen, es una concatenación de rutas, ejemplo:
ruta1/archivo.exe;ruta2/archivo.sql...

¿ Cómo puedo cambiarlo ?

Código Delphi [-]
procedure TForm1.Traspaso(archivoOrigen, archivoDestino : String);
var
  serverMethods: TServerMethods1Client;
  stream: TStream;
  listaRutas: TStringList;
  i: Integer;
  rutaArchivo, nombreArchivo, rutaDestinoCompleta, ExistingFileName: String;
begin
  listaRutas := TStringList.Create;
  try
    listaRutas.StrictDelimiter := True;
    listaRutas.Delimiter := ';';
    listaRutas.DelimitedText := archivoOrigen;

    for i := 0 to listaRutas.Count - 1 do
    begin
      rutaArchivo := listaRutas[i];
      nombreArchivo := ExtractFileName(rutaArchivo);
      rutaDestinoCompleta := IncludeTrailingPathDelimiter(archivoDestino) + nombreArchivo;

      if FileExists(rutaDestinoCompleta) then
      begin
        if ExtractFileExt(nombreArchivo).ToLower = '.exe' then
        begin
          ExistingFileName := IncludeTrailingPathDelimiter(archivoDestino) +
            ChangeFileExt(nombreArchivo, FormatDateTime('dd-mm-yyyy-hhnnss', Now)) + ExtractFileExt(nombreArchivo);
          RenameFile(rutaDestinoCompleta, ExistingFileName);
        end;
      end;

      try
        serverMethods := TServerMethods1Client.Create(SQLConnection1.DBXConnection);
        stream := serverMethods .DownloadFile(rutaArchivo);
        try
          with TFileStream.Create(rutaDestinoCompleta, fmCreate) do
          try
            CopyFrom(stream, 0);
          finally
            Free;
          end;
        finally
          FreeAndNil(stream);
          FreeAndNil(serverMethods);
        end;

        if ExtractFileExt(rutaDestinoCompleta) = '.sql' then
          ExecuteSQLFromFile(rutaDestinoCompleta, 'SS');
      except
        on E: Exception do
          ShowMessage('Error al copiar ' + nombreArchivo + ': ' + E.Message);
      end;
    end;
  finally
    FreeAndNil(listaRutas);
  end;
  Application.ProcessMessages;
end;

Neftali [Germán.Estévez] 07-02-2024 16:49:36

Por favor, revisa los foros donde colocas las preguntas.
Has publicado esta pregunta en el foro de "Trucos".
Revisa la Guía de estilo de los foros.

En cuando a la pregunta, entiendo que tienes un error, pero exactamente qué es lo que quieres cambiar?

NOTA: Muevo el hilo a otro foro.

javier14 07-02-2024 17:06:28

Quiero que deje de saltarme el Invalid Pointer Operation por cada archivo que se copia del servidor al cliente. Gracias

Delphi01 07-02-2024 22:57:32

Cita:

Empezado por javier14 (Mensaje 554379)
Quiero que deje de saltarme el Invalid Pointer Operation por cada archivo que se copia del servidor al cliente. Gracias

El error "Invalid Pointer Operation" puede ocurrir por varias razones


1-Verificar la existencia de archivos antes de copiarlos: Antes de copiar un archivo, puedes verificar si existe en la ubicación de destino utilizando la función "FileExists".

2-Verificar la validez de los objetos antes de liberarlos: Asegúrate de que los objetos que estás utilizando, como "stream" y "serverMethods", sean válidos antes de liberar su memoria. Puedes verificar si un objeto es nulo antes de liberarlo utilizando la función "Assigned"

3-Manejar excepciones de manera más específica: En lugar de capturar todas las excepciones con "on E: Exception do", puedes capturar excepciones más específicas para manejarlas de manera adecuada. Esto te permitirá identificar y solucionar problemas específicos que puedan estar causando el error.

etc...


La franja horaria es GMT +2. Ahora son las 20:09:31.

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