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;