Ver Mensaje Individual
  #7  
Antiguo 01-07-2004
Avatar de Sr_Sombrero
Sr_Sombrero Sr_Sombrero is offline
Miembro
 
Registrado: may 2003
Posts: 49
Reputación: 0
Sr_Sombrero Va por buen camino
Finalmente encontré este código para enviar y recibir archivos como buffer.
Lo copio para futuras consultas
Sacado de una página que ya no existe (delphi.owns.it).

Código Delphi [-]
procedure TClientSocket.ReceiveFile(FileName: string);
var
  Data: string;
  Buffer: pchar;
  BinaryFile: file of char;
  BinaryFileSize, BytesRead: integer;
begin
  Idle(0);
  Data := ReceiveString;
  BinaryFileSize := StrToInt(Data);
  Idle(0);
  AssignFile(BinaryFile, FileName);
  ReWrite(BinaryFile);
  while FileSize(BinaryFile) < BinaryFileSize do
  begin
    Sleep(1);
    BytesRead := ReceiveLength;
    if BytesRead > 0 then
    begin
      GetMem(Buffer, BytesRead);
      try
        ReceiveBuffer(Buffer^, BytesRead);
        BlockWrite(BinaryFile, Buffer^, BytesRead);
      finally
        FreeMem(Buffer);
      end;
    end;
  end;
  CloseFile(BinaryFile);
end;

procedure TClientSocket.SendFile(FileName: string);
var
  BinaryFileSize, BytesRead: integer;
  Buffer: pchar;
  BinaryFile: file of char;
  BinaryFileHandle: THandle;
begin
  BinaryFileHandle := CreateFile(pchar(FileName), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL OR FILE_FLAG_NO_BUFFERING, 0);
  BinaryFileSize := GetFileSize(BinaryFileHandle, nil);
  CloseHandle(BinaryFileHandle);
  AssignFile(BinaryFile, FileName);
  Reset(BinaryFile);
  SendString(inttostr(BinaryFileSize));
  Sleep(500);
  repeat
    Sleep(1);
    GetMem(Buffer, 2048);
    try
      BlockRead(BinaryFile, Buffer^, 2048, BytesRead);
      SendBuffer(Buffer^, BytesRead);
    finally
      FreeMem(Buffer);
    end;
  until BytesRead < 2048;
  CloseFile(BinaryFile);
end;

Saludos

Última edición por Sr_Sombrero fecha: 05-07-2004 a las 06:56:24.
Responder Con Cita