hola, me lei otros hilos del mismo tema, pero tengo una particularidad, en este archivo no tengo un registro de los datos, si no que investigando necesito modificar un buffer de 32 byte de un archivo en binario.
Deberia investigar si el buffer de 32 que necesito viene siempre en la misma posicion y no hacerme problemas en la lectura.
Ahora a los echos, lo que me han pedido es que apartir de ese buffer de 32 byte lo levanto en distintas TEdit, osea tengo 32 TEdit con los datos levantados, hasta ahi todo bien, ahora el usuario modificara esos datos que le muestro en los TEdit y debo reemplazarlos, osea hacer un write al archivo, otra cosa el archivo a modificar es de 8 megas aproximadamente, siempre es mas o menos lo mismo, tambien he estado probando leyendo el archivo con un lector hexadecimal y parece que dicho buffer viene 4 veces en el mismo archivo en distintas posiciones, solo el primer buffer viene siempre en la misma posicion, deberia confirmar eso... hay alguna forma de buscar con los 32 byte que tengo y guardar o sobreescribir los 32 nuevos, en las 4 apariciones... por mi cuenta lo puedo hacer por medio de algun lector hexadecimal pero necesito algo entendible para el usuario.
Por ahora tengo el codigo de lectura.
Código Delphi
[-]
procedure TfrmMain.btnAbrirClick(Sender: TObject);
var
fstram: TFileStream;
buffer: array[0..31] of byte;
i:integer;
begin
if opdAbrir.Execute() then
begin
fstram := TFileStream.Create(opdAbrir.FileName, fmOpenRead);
while fstram.Position < fstram.Size do
begin
for i := 0 to 32 - 1 do
begin
buffer[i] := 0;
end;
fstram.Read(buffer, 32);
if (buffer[0] = 0) and (buffer[1] = 192) then
begin
exit;
end;
end;
fstram.Free;
end
else
begin
end;
end;
Necesito ayuda con el codigo que me sobreescribira los datos nuevos.
Tengo este codigo que saque del blog de delphiallimite, pero me falta alguna ayuda para lo que quiero hacer.
Código Delphi
[-]
procedure TFPrincipal.AnadirStreamBinario;
var F: TFileStream;
Buffer: array[0..1023] of byte;
i, j: Integer;
b: Byte;
begin
F := TFileStream.Create( ExtractFilePath( Application.ExeName ) + 'prueba.dat', fmOpenWrite );
F.Position := F.Size;
b := 0;
for j := 1 to 100 do
begin
for i := 0 to 1023 do
begin
Buffer[i] := b;
Inc( b );
end;
F.Write( Buffer, 1024 );
end;
F.Free;
end;
Disculpen si me hice lio para explicar lo que necesito, espero que me sepan entender.