// Esta função determina o tamanho de um arquivo em bytes.
// O tamanho do arquivo pode ser maior que 2 GB.
function GetFileSizeEx(const FileName: String): Int64;
var
  lHandle: Windows.THandle;
  lFindData: Windows.TWin32FindData;
begin
  // Define retorno default
  Result := 0;

  // Obtém handle do arquivo
  lHandle := Windows.FindFirstFile(PChar(FileName), lFindData);
  if lHandle <> INVALID_HANDLE_VALUE then
  begin
    Windows.FindClose(lHandle);
    Int64Rec(Result).Lo := lFindData.nFileSizeLow;
    Int64Rec(Result).Hi := lFindData.nFileSizeHigh;
  end;
end;


// Copia o arquivo fonte para um arquivo destino, preservando sua data de 
modificação.
procedure CopyFile(const Source, Dest: string);
var
  SourceStream, DestStream: Classes.TFileStream;
begin
  DestStream := nil;
  // Abre streams de dados para os arquivos de origem e destino
  SourceStream := Classes.TFileStream.Create(
    Source, SysUtils.fmOpenRead or SysUtils.fmShareDenyWrite
  );
  try
    DestStream := Classes.TFileStream.Create(
      Dest, Classes.fmCreate or SysUtils.fmShareExclusive
    );
    try
      // Copia arquivo da origem até o destino
      DestStream.CopyFrom(SourceStream, SourceStream.Size);

      // Define a data de modificação do arquivo destino para a mesma do 
arquivo origem
      SysUtils.FileSetDate(
        DestStream.Handle, SysUtils.FileGetDate(SourceStream.Handle)
      );
    finally
      // Fecha arquivo destino
      DestStream.Free;
    end;
  finally
    // Fecha arquivo origem
    SourceStream.Free;
  end;
end;



Sds.,
Rubem Rocha
Manaus, AM

_________________________________________________________________
MSN Busca: fácil, rápido, direto ao ponto.  http://search.msn.com.br

Responder a