تقابلني مشكله في تحديد الادريس حيث بعد وضع الادريس المراد التعديل على القيم الخاصه به فيتم التعديل بقيم اخرى في ادريس اخر . وذلك لاني انسخ الادريس من برنامج الهيكس .
هذا الملف اجرب عليه وهو خاص بالهاردديسك وهذه الصورة تحمل العنوان المراد التعديل عليه لسهولة فهمي اريد مثال على هذه الصورة للتوضيح .
الصورة للملف 1.bin كيف يتم البحث داخله وعن اول قيمة واخر قيمة المشار اليهم بالصورة ثم نسخهم الى الملف 2.bin في نفس الادريسس .
اريد ان افهم الية التعامل مع الملفات بأمثله حتى تتضح المعلومة ,, ايضا لا يهم التطبيق على هذان الملفان لاني لا احتاجهم في عملي بل هم لعمل مثال عملي ,
type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end;
var Form1: TForm1;
implementation
{$R *.dfm}
type ByteArray = array of Byte;
function read_(const FileName: string; Offset: DWORD; Length: DWORD; out bArray: ByteArray): Integer; var MS: TMemoryStream; begin MS := TMemoryStream.Create; try MS.LoadFromFile(FileName); MS.Position := Offset; SetLength(bArray, Length); Result := MS.Read(bArray[0], Length); finally MS.Free; end; end;
function write_(const FileName: string; Offset: DWORD; var bArray: ByteArray): Integer; var MS: TMemoryStream; begin Result := 0; MS := TMemoryStream.Create; try MS.LoadFromFile(FileName); MS.Position := Offset; Result := MS.Write(bArray[0], Length(bArray)); MS.SaveToFile(FileName); finally MS.Free; end; end;
procedure TForm1.Button1Click(Sender: TObject); var bArray: ByteArray; begin read_('1.bin', $3CC, $74, bArray); write_('2.bin', $3CC, bArray); end;
end.
سبحان الله وبحمده سبحان الله العظيم
كل من 2 users say قال شكرا ل Agmcz على المشاركة المفيدة2 users say Thank You to Agmcz for this post • eng_ali, ELARAPY
موضوع رائع وجميل شكرا جزيلا لجميع الاساتدة والقائمين على المنتدي لقد استفدت كثيرا من بعض المواضيع والنقاشات المطروحة في جميع اقسام المنتدى فشكرا مرة اخرى للجميع
اخواني انا جديد معكم في المنتدى و ليس لي الا بضع شهور في دراسة البرمجة بالدلفي
وسؤال الاخ ELARAPY بصراحة رائع واجوبة الاساتدة كانت اروع في طريقة تحديد قراءة وكتابة بلوك معين بتحديد نقطي بداية ونهاية الــ Offset
ولقد قمت بتجربتها والنتيجة رائعة
ولاكن عندي مشكل ارجوا ان كان في مقدور الاساتدة و الاخوه شرحه لي او فكرة توجيهني في فهمه وهو
عند تحديد بداية ونهاية offset لملف ما كما صرح الاستاد Agmcz بارك الله فيه
فهي تكون محصورة بدالك الملف فقط بمعنى انه لو اردت قراءة بلوك معين وكتابته سيكون محصور بين بداية ونهاية الــ Offset الدين صرحت بهما في برمجة البرنامج
وانا لدي ملفين يحملان نفس قيمة البلوك ولاكن لكل بلوك منهما بداية ونهاية offset مختلفة عن الاخر؟؟
هنا طريقة تحديد البلوك عن طريق Offset اصبحت غير مجدية في حالتي لاختلاف تواجد البلوك في الملفين
وانا اريد طريقة للبحث داخل داتا الملف لاني لاحظت ان اول 8 بايت واخر 8بايت للبوك المراد قراته وكتابته للملفين لهما نفس القيمة
واريد تعويض تحديد البلوك من (بداية ونهاية) Offset الى قيمتي 8بايت (لبداية ونهاية) البلوك
اولا اخي الحبيب مهندس Agmcz الكود يعمل جيدا بارك الله فيك , ما يهمني كيف يمكنني ان اصل لتلك النتيجة بمجهودي الذاتي ؟
بحثت على الانترنيت وايضا في دلفي Help عن الصنف TMemoryStream ولم اصل لمثل ذلك الكود وحاولت النظر الى جميع الاستخدامات التي تخص ذلك الصنف ولم اجد مثال واضح للتعامل مع BinFile مثل مثالك اخي الكريم .
اود معرفة ---------- : 1- طريقة البحث والمحاولة . 2- كل شئ يخص الصنف TMemoryStream وجميع الدوال التي تندرج تحته بامثلة بسيطه ,, 3- ما هي طريقة البحث عن قيمة داخل Bin File وان يكون البحث من نهاية الملف أي من الاسفل الى الاعلى ثم ارجاع عنوان الادريس الذي يحمل تلك القيمة ثم الكتابة من ذلك العنوان ..
افضل شئ علمني التعامل الكامل مع ذلك الصنف حتى لا اطيل بالاسئلة في المنتدى .
11-07-2019, 04:25 AM (آخر تعديل لهذه المشاركة: 11-07-2019, 04:27 AM بواسطة eng_ali.)
السلام عليكم ورحمة الله وبركاته
اخي الكريم اولا شكرا جزيلا على ردك الكريم
لقد وفقني ربي سبحانه وتعالى في تحقيق الشرط والسؤال الدي طرحته سابقا بعد دراسة وتحليل بعض النمادج والامثلة الخاصة بــ TMemoryStream
بحيث قمت بتحديد قيمتين من داتا ملف BIN ثم البحث عن هاتين القيمتين بالقراءة المتتالية للداتا وعند العثور عليها يتم تحويلها لبداية ونهاية للبولك الدي اريد قراءته وكتابته وقد نجحت الفكرة وقمت بتجربتها على عدة ملفات والنتيجة مرضية ارجوا ان تجد فيها جوابا لسؤالك 3 فالقراءة من اول الملف تختلف عن القراءة من أخره والله أعلم
وهدا مثال على ما توصلت له
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;
بارك الله فيك اخي eng_ali للمشاركة ,, انا لا ادري لماذا لم يتابعوا الاخوة المشرفين المواضيع وارى اكثر الاهتمام بالموضوع الجديد ,
علما ان من دواعي اصراري تعلم الدلفي هو ذلك المنتدى الجميل D4A .
شكرا للجميع .
قل إن صلاتي ونسكي ومحياي ومماتي لله رب العالمين
كل من 1 user says قال شكرا ل ELARAPY على المشاركة المفيدة1 user says Thank You to ELARAPY for this post • eng_ali
15-07-2019, 01:00 PM (آخر تعديل لهذه المشاركة: 15-07-2019, 02:29 PM بواسطة Agmcz.)
(14-07-2019, 01:43 AM)ELARAPY كتب : السلام عليكم ورحمة الله وبركاته
بارك الله فيك اخي eng_ali للمشاركة ,, انا لا ادري لماذا لم يتابعوا الاخوة المشرفين المواضيع وارى اكثر الاهتمام بالموضوع الجديد ,
علما ان من دواعي اصراري تعلم الدلفي هو ذلك المنتدى الجميل D4A .
السلام عليكم ورحمة الله وبركاته اخي واستاذي الحبيب Agmcz
انا لا اقصد موضوع بعينه استاذي ولكن في الغالب اجد المشرف يرد على السؤال وليست هناك شروحات .
هناك منتدى (سؤال و جواب حول دلفي) يصلح لطرح سؤال من شخص والرد على السؤال من اخر .
وهناك منتدى (دروس دورة دلفي للعرب ) يحمل الشروحات فاين الصنف TMemoryStream في ذلك المنتدى ؟
انا اعلم جيدا انه من الصعب وضع كل كبيرة وصغيرة تخص البرمجة بالمنتدى لان ذلك يتطلب مئات بل ألوف السطور ولكن كنت اتمنى بعدما يتم الرد على السؤال ينشأ شرح للسائل اذا اراد التعلم , اما اذا كان يحتاج شئ بعينه ووجد ضالته فلا حرج .
اخي انا اريد التعلم , وقد اخبرت بذلك عندما اخبرتك بان الكود يعمل بارك الله فيك .