PDA

Ver la Versión Completa : Copiar archivos Servidor-Cliente


javier14
07-02-2024, 15:42:02
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 ?

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 (https://www.clubdelphi.com/foros/guiaestilo.php).

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
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...