ما هي الملفات و كيف نتعامل معها ؟؟
#36
السلام عليكم ورحمة الله وبركاته 
اخي الكريم اولا شكرا جزيلا على ردك الكريم 
لقد وفقني ربي سبحانه وتعالى في تحقيق الشرط والسؤال الدي طرحته سابقا بعد دراسة وتحليل بعض النمادج  والامثلة الخاصة بــ TMemoryStream
بحيث قمت بتحديد قيمتين من داتا ملف BIN ثم البحث عن هاتين القيمتين بالقراءة المتتالية للداتا وعند العثور عليها يتم تحويلها لبداية ونهاية للبولك الدي اريد قراءته وكتابته وقد نجحت الفكرة وقمت بتجربتها على عدة ملفات والنتيجة مرضية  ارجوا ان تجد فيها جوابا لسؤالك 3 فالقراءة من اول الملف تختلف عن القراءة من أخره والله أعلم 
وهدا مثال على ما توصلت له 
كود :
unit Unit1; interface uses   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,   Dialogs, StdCtrls; type   TForm1 = class(TForm)     Button1: TButton;     Edit1: TEdit;     Button2: TButton;     Label1: TLabel;     Label2: TLabel;     Label3: TLabel;     Label4: TLabel;     OpenDialog1: TOpenDialog;     procedure Button1Click(Sender: TObject);     procedure Button2Click(Sender: TObject);   private     { Private declarations }   public     { Public declarations }   end; type ByteArray = array of Byte; var   Form1: TForm1;   Buff : AnsiString;   BB : TStringStream;   FileName:String;   F: File;   BinaryBytesRead, TotalBytesRead, i, BufferSize: Integer;   Buffer: array [0..4095] of byte;   StartOffset,EndOffset,Star,EndO: Dword; implementation {$R *.dfm} {------------------------------------------------------------------------------} procedure TForm1.Button1Click(Sender: TObject); begin opendialog1.Filter:='Binary Files|*.bin'; if opendialog1.Execute then begin   Edit1.Text:= Opendialog1.FileName;   FileName:= Opendialog1.FileName end; end; {------------------------------------------------------------------------------} procedure TForm1.Button2Click(Sender: TObject); var   MS1,MSS:TMemoryStream; begin   TotalBytesRead := 0;   BinaryBytesRead := 0;   Buffer [0] := 0;   FillChar(Buffer,SizeOf(Buffer),0);   if FileExists(FileName) then     begin     AssignFile (F, FileName);     Reset (F,1);     try       repeat       BlockRead (F,Buffer,Sizeof (Buffer),BinaryBytesRead);       inc(TotalBytesRead, BinaryBytesRead); { Start Offset Block } { Ãæá 4ÈÇíÊ ãä ÇáÈáæß } {2D726F6D}       for i := 0 to BinaryBytesRead - 4 do       begin       if buffer [i + 0] <> $2D then continue;       if buffer [i + 1] <> $72 then continue;       if buffer [i + 2] <> $6F then continue;       if buffer [i + 3] <> $6D then continue;   StartOffset:= TotalBytesRead - BinaryBytesRead + I;       end; { End Offset Block }  {  ÃÎÑ 4 ÈÇíÊ ãä ÇáÈáæß }  {453DCD28}       for i := 0 to BinaryBytesRead -4 do       begin       if buffer [i + 0] <> $45 then continue;       if buffer [i + 1] <> $3D then continue;       if buffer [i + 2] <> $CD then continue;       if buffer [i + 3] <> $28 then continue;   EndOffset:= TotalBytesRead - BinaryBytesRead  + I;       end;       until BinaryBytesRead < 4;       finally       CloseFile (F); {------------------------ Creat and Write Bin File -------------------------}     MS1:= TMemoryStream.Create;     MS1.LoadFromFile(FileName);       Star := StrToInt('$'+IntToHex(StartOffset,8));       EndO  := StrToInt('$'+IntToHex(EndOffset,8));     BufferSize := EndOffset - StartOffset ;     SetLength(Buff,BufferSize);     MS1.Position := StartOffset;     MS1.ReadBuffer(Buff[1],BufferSize);     BB := TStringStream.Create(Buff);     MSS:= TMemoryStream.Create;   try     MSS.LoadFromStream(BB);     MSS.writeBuffer(Buff[1],BufferSize);     if MSS.Size>0 then begin     MSS.SaveToFile('.\Find_Block.bin');     label3.Caption:='0x'+IntToHex(StartOffset,8);     label4.Caption:='0x'+IntToHex(EndOffset,8);     end     else     ShowMessage('Error Data Or File incorect');   finally   MS1.Free;   MSS.Free; end; end; end; end; end.

لااله الا الله محمد رسول الله
[-] كل من 2 users say قال شكرا ل eng_ali على المشاركة المفيدة
  • أبو معاذ, ELARAPY
الرد


الردود في هذا الموضوع
RE: ما هي الملفات و كيف نتعامل معها ؟؟ - بواسطة eng_ali - 11-07-2019, 04:25 AM

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم