إقتباس :لماذا المتغيران offest, length من النوع DWORD ؟
في هذه الحالة لا يهم DWORD هو نوع من ااعداد الصحيحة الموجبة فقط ..يمكنه التعامل و تحديد العناوين في ملفات يصل حجمها الى 4G ... و لكن الافضل استعمال نوع صحيح موجب و سالب signed integer لان خلط بينها قد يؤدي الى عمليات خاطئة عند المقارنة وغير ذلك..
ملاحظة حول الدلة _Read استعمال TMemoryStream في المثال السابق لا معنى له في هذه الدالة لانه يقوم بفتح كل الملف و نقله الى الذاكرة ثم يتم نقل مجددا الجحم المراد في مصفوفة اخرى... الاولى استعمال TFileStream الذي لا يخزن اي شي في الذاكرة...
بما ان الملفات Bin التي تريد تعديلها صغيرة اذن يمكنك استعمال TMemoryStream لتعديل بعض المعطيات بطريقة صحيحة وسهلة ... عند فتح ملف يقوم TMemoryStream بنقله كاملا الى الذاكرة و يمكن الوصول اليها عن طريق TMemoryStream.Memory عندئذ يمكن التعامل معها كمصفوفة بطريقة سهلة وذلك بتحويل نوع المدخل Memory من Pointer عام الى PByteArray... في النسخ الحديثة من دالفي ينبغي استعمال TBytesStream الذي يخزن المعطيات مباشرة في مصفوفة يمكن الولوج اليها من خلال Bytes هذا اسهل دون الحاجة الى كود اضافي
كود :
var
MS: TMemoryStream;
D:byte;
P:PByteArray;
begin
MS := TMemoryStream.Create;
try
MS.LoadFromFile(FileName); // open the file & load it in memory
// option 1 use Position & write
D:= 50; // new arbitrary value
MS.Position := $34; //writing pos
MS.Write(D, SizeOf(D));// store value of D to memory to the address $34 and inc position by SizeOf(D)
D:= 177; // new arbitrary value
MS.Position := $95;//writing pos
MS.Write(D, SizeOf(D));// store 177 to memory to $95 and inc position by SizeOf(D)
// option 2 use TMemoryStream.Memory
P := MS.Memory; // puts memory address to P and map it as array of byte
P[$34]:=50;// store 50 to the address $34
P[$95]:=177;// store 177 to the address $95
//option 3 use TBytesStream instead of TMemoryStream
//MS.Bytes[$34]:=50;
//MS.Bytes[$95]:=177;
MS.SaveToFile(FileName); // save entire memory in the file
finally
MS.Free;
end;

![[-]](https://delphi4arab.net/forum/D4A2020/collapse.png)