Ver Mensaje Individual
  #2  
Antiguo 05-06-2025
navbuoy navbuoy is offline
Miembro
 
Registrado: mar 2024
Posts: 360
Reputación: 3
navbuoy Va por buen camino
¿Cómo calcular el tamaño?
Opción 1: Si solo quieres el número de elementos

Código Delphi [-]
Size := Length(NifEnt); // número de elementos

Opción 2: Si necesitas el tamaño en bytes

Código Delphi [-]
SizeInBytes := Length(NifEnt) * SizeOf(TNifV2Ent);

¿Cómo guardar NifEnt en un TMemoryStream?
Si los campos son datos simples (integer, double, etc), podés hacer algo así:

Código Delphi [-]
var
  stream: TMemoryStream;
begin
  stream := TMemoryStream.Create;
  try
    stream.WriteBuffer(NifEnt[0], Length(NifEnt) * SizeOf(TNifV2Ent));
    stream.SaveToFile('nifent.dat');
  finally
    stream.Free;
  end;
end;

⚠️ Si el record contiene strings u objetos, esto no sirve, porque los strings son punteros. En ese caso necesitás serializar manualmente cada campo.

🛠 Alternativa para datos complejos (con strings)
Si TNifV2Ent contiene string, tendrías que escribir algo así:

Código Delphi [-]
for i := 0 to High(NifEnt) do
begin
  WriteLnToStream(stream, NifEnt[i].Nif);
  // y así con cada campo
end;

Y para escribir un string a un stream:

Código Delphi [-]
procedure WriteLnToStream(Stream: TStream; const S: string);
var
  len: Integer;
begin
  len := Length(S);
  Stream.WriteBuffer(len, SizeOf(len));
  Stream.WriteBuffer(PChar(S)^, len * SizeOf(Char));
end;
Responder Con Cita