#1 con la clase TFileStream copiando el archivo en bloques de 1 KB, funciona con Windows y Linux:
Código: Seleccionar todo
Procedure Copiar(Origen, Destino: String);
Var
Archivo1, Archivo2: TFileStream;
BytesBuffer: Array[0..1024] Of Char;
Leido: LongInt;
Begin
Archivo1 := TFileStream.Create(Origen, FmOpenRead);
Archivo2 := TFileStream.Create(Destino, FmOpenWrite Or FmCreate);
Repeat
Leido := Archivo1.Read(BytesBuffer, SizeOf(BytesBuffer));
Archivo2.Write(BytesBuffer, Leido);
Until (Leido <> SizeOf(BytesBuffer));
Archivo1.Free;
Archivo2.Free;
End;
Código: Seleccionar todo
Procedure Copiar(Archivo, Ruta: String);
Var
Origen, Destino: File;
Leido, Escrito: Word;
Buffer: Array[1..1024] Of Char;
Begin
Assign(Origen, Archivo);
Reset(Origen, 1);
Assign(Destino, Ruta);
ReWrite(Destino, 1);
Repeat
BlockRead(Origen, Buffer, SizeOf(Buffer), Leido);
BlockWrite(Destino, Buffer, Leido, Escrito);
Until (Leido = 0) or (Escrito <> Leido);
Close(Origen);
Close(Destino);
End;
End.
Código: Seleccionar todo
CopyFile(PChar(Origen), PChar(Destino), True)