delphi4arab منتديات دلفي للعرب

نسخة كاملة : ما هي الملفات و كيف نتعامل معها ؟؟
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
الصفحات : 1 2 3 4 5 6
متعة البرمجة على الملفات bin با استعمال
Stream
و المصفوفات .
ما شاء الله موضوع جميل بارك الله فيكم

مع ان الموضوع منذ فترة كبيره إلا أنه الوحيد الذي وجدته بالعربيه بصيغة PDF على جميع مواقع الكتب .

اريد تعلم كيفية التعامل مع الملفات خصوصا BinFile  واحاول عمل واجهة بسيطه بها عدد 2 Buttons الاول يحمل قيمة محددة عند حدث الضغط يقوم بكتابة تلك القيمة في Adress معين بالملف واقصد بالكتابة اي الاستبدال اعني بذلك ان يبقى حجم الملف كما هو وعدد Adress كما هو ..
والمفتاح الثاني عند الضغط عليه يقوم بقص مجموعه عناوين محددة داخل الملف ولتكن من اخره .

ولا يهم ان يكون التعديل على نفس الملف او انتاج ملف اخر به التعديل .

انا اعلم جيدا ان الطلبات مرفوضه حتى لا يستغل الطالب خبرة الاخرين في برامج يتاجر بها او غيره , لكني والله احب تعلم دلفي واود عمل البرنامج بنفسي واخيرا البرنامج سيساعدني في عملي حيث اني اعمل في صيانة الاجهزة الالكترونيه وساستخدمه في التعديل على ملفات سوفتوير التلفاز حيث اني اقوم بالتعديل كل مرة يدوي ببرنامج HexWorkShop ..

انا اعرف القيم التي استخدمها واماكن التعديل على الملفات ولكني اريد تعلم البرمجة بشكل عملي ومفيد .

الخطوات التي اتبعتها في محاولة عمل البرنامج ما هي الا القراءة والاطلاع على بعض المواقع والكتب مثل كتاب التعامل مع الملفات بدلفي للاستاذ TF6M وايضا بعض المواقع مثل   http://www.delphibasics.co.uk/Article.asp?Name=Files

ولكني حديث بالبرمجة ولا اعلم منها الا اساسيات الباسكال فقد ركزت على تعلمها كما اشار الاخوة الكرام لي .

ان كان طلبي مرفوض فارجوا ان يتم عمل درس للمبتدئين في التعامل مع الملفات بإستفاضه .

اخيرا تفضلوا علي بالنصيحة والتوجيه .

شكرا جزيلا والسلام علي من أتبع الهدى .
السلام عليكم
ألق نظرة هنا

أيضا إستخدم الصنف TMemoryStream
ودوال ReadFile, WriteFile

PHP كود :
function file_(const FileNamestringOffsetDWORDNewValueByte): Integer;
var
 
 MSTMemoryStream;
begin
  Result 
:= 0;
 
 if not FileExists(FileNamethen
    Exit
;
 
 MS := TMemoryStream.Create;
 
 try
    MS
.LoadFromFile(FileName);
 
   MS.Position := Offset;
 
   Result := MS.Write(NewValueSizeOf(Byte));
 
   //MS.SetSize(MS.Size - 1);
 
   MS.SaveToFile(FileName '_Patched');
 
 finally
    MS
.Free;
 
 end;
end;

// usage
// file_('file.bin', 3, $AB); 
(20-05-2019, 03:40 AM)Agmcz كتب : [ -> ]ألق نظرة هنا
أيضا إستخدم الصنف TMemoryStream ودوال ReadFile, WriteFile
وعليكم السلام ورحمة الله وبركاته

بارك الله فيك اخي الحبيب .. رجاءا لا تنسى دائما وضع Comment لاني مبتدأ بارك الله فيك .

ما فهمته من الكود هو عبارة عن دالة ترجع integer
ومتغير ms تم حجزه وهو خاص بالملف .
جملة if للتحقق من وجود الملف وان لم يكن موجود فيتم انشاءه .. هل يتم تعويض ال (FileName) بمسار واسم الملف المراد التعامل معه ؟
MS.LoadFromFile(FileName); لتحميل الملف .
MS.Position := Offset; لتحديد الادريس المراد التعامل معه . فهل يتم تغير Offset الى العنوان الخاص به ؟
Result := MS.Write(NewValue, SizeOf(Byte)); حفظ القيم الجديدة على الملف الذي يحتويه المتغير Ms
MS.SaveToFile(FileName + '_Patched'); حفظ ما بالمتغير Ms الى القرص الصلب .
finally
MS.Free; لتحرير المتغير من الذاكرة .

انا اريد شرح لاني اريد التعلم وهذا ما فهمته من النظر الى الكود واشعر ان الامور ليست بالوضوح التام امام عيني .

شكرا
كود :
جملة if للتحقق من وجود الملف وان لم يكن موجود فيتم انشاءه ..
لا، ان لم يكن الملف موجود يتم الخروج/التوقف عن تنفيذ الأوامر التالية.
إقتباس :هل يتم تعويض ال (FileName) بمسار واسم الملف المراد التعامل معه ؟
اسم الملف كامل بما في ذلك المسار
إقتباس :MS.Position := Offset; لتحديد الادريس المراد التعامل معه . فهل يتم تغير Offset الى العنوان الخاص به ؟
للذهاب لوضع/مكان معين، وما يلي من قراءة/كتابة تكون في ذلك المكان
MS.Position := Offset; .... كيف يتم تحديد عدد 2 Offset لتحديد بداية ونهاية البلوك المراد اعادة كتابته .

اقصد تحديد عنوان (من .. الى )
(20-05-2019, 12:58 PM)ELARAPY كتب : [ -> ]MS.Position := Offset; .... كيف يتم تحديد عدد 2 Offset لتحديد بداية ونهاية البلوك المراد اعادة كتابته .

اقصد تحديد عنوان (من .. الى )

المهم تحديد مكان البداية
إذا كان عنوان البداية 2 وحجم الداتا التي سيتم كتابتها 6 بايت عنوان النهاية سيكون 8.
الشكر لله ثم لكم جميعا على التعاون . ان شاء الله ساجرب واعاود الرد بالموضوع .

ربنا يبارك لكم ويجزيكم الخير ان شاء الله. السلام عليكم .

اخر شئ بما يخص الموضوع .. استخدام Result := MS.Write(NewValue, SizeOf(Byte)); هل تفيد كتابة داتا جديدة مكان القديمة ام تشبه insert ؟

كيف يتم تغير ال Value للملف او اضافه Value جديد مما يزيد من حجم الملف ؟
إقتباس :اخر شئ بما يخص الموضوع .. استخدام Result := MS.Write(NewValue, SizeOf(Byte)); هل تفيد كتابة داتا جديدة مكان القديمة ام تشبه insert ؟

كيف يتم تغير ال Value للملف او اضافه Value جديد مما يزيد من حجم الملف ؟

الإجراء Write يقوم بالكتابة في مجال الذاكرة التي نعمل عليها
أي كتابة قيم جديدة في مكان القديمة.


يتم تحديد موضع Read/Write بإستخدام
MS.Position
أو
MS.Seek


لنحصل على شيء يشبه Insert
سنستعمل Read, Write, SetSize
(20-05-2019, 12:58 PM)ELARAPY كتب : [ -> ]MS.Position := Offset; .... كيف يتم تحديد عدد 2 Offset لتحديد بداية ونهاية البلوك المراد اعادة كتابته .

اقصد تحديد عنوان (من .. الى )

تفقد السورس هنا 
http://delphi4arab.net/forum/showthread.php?tid=10011
الصفحات : 1 2 3 4 5 6