Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 20-10-2010
elarys elarys is offline
Miembro
 
Registrado: abr 2007
Posts: 94
Poder: 17
elarys Va por buen camino
Modificar archivo binario

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
  //busco el archivo con un open dialog
  if opdAbrir.Execute() then
  begin
    //lo leo en modo lectura
    fstram := TFileStream.Create(opdAbrir.FileName, fmOpenRead);
    //mientras no sea el final del archivo   
    while fstram.Position < fstram.Size do
    begin
      //con este for limbio de basura el buffer
      for i := 0 to 32 - 1 do
      begin
        buffer[i] := 0;
      end;
      //leo el buffer de 32
      fstram.Read(buffer, 32);
      //lo que se que el buffer en la posicion 0 debe ser 0
      //y en la posicion 1 debe ser 192
      //si no es asi tengo que seguir leyendo
      if (buffer[0] = 0) and (buffer[1] = 192) then
      begin
        //Levanto los datos y termino el while
        //TEdit0.Text := buffer[0];
        //TEdit1.Text := buffer[1];
        //TEdit2.Text := buffer[2];
        //etc...
        exit;
      end;
    end;
    fstram.Free;
  end
  else
  begin
    //No eligio ningun archivo
  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;
  // Guardamos 100 veces el buffer de 1 KB (100 KB)
  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.

Última edición por elarys fecha: 20-10-2010 a las 23:50:24.
Responder Con Cita
  #2  
Antiguo 21-10-2010
elarys elarys is offline
Miembro
 
Registrado: abr 2007
Posts: 94
Poder: 17
elarys Va por buen camino
se complico... me pasaron archivos nuevos y veo que no siempre vienen los datos en la misma posicion y no se como buscarlos... lo que hice fue abrir el programa con que se crean, cargar el archivo y abrir el .exe donde esta el programa con los datos cargados con TSearch que es un lector hexadecimal... asi puedo abrir los datos y modificar pero de esta forma lo hago manualmente como se podria hacer mas facil para el usuario.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Localizar datos en un archivo binario Teitek Varios 1 17-05-2010 11:37:06
Leer archivo Binario de una vez NEG1414 C++ Builder 2 01-02-2010 01:12:17
Leer un Archivo Binario voldemmor Varios 2 30-03-2009 19:19:25
transformar archivo binario a texto pakitto Varios 1 26-11-2008 15:09:45
Modificar registro en archivo binario tamarinda C++ Builder 3 06-03-2008 22:01:20


La franja horaria es GMT +2. Ahora son las 13:50:00.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi