ما هي الملفات و كيف نتعامل معها ؟؟
#50
إقتباس :لماذا استخدم متغير سالب في حين اني استخدمه كادرريس ومن المفترض ان العناوين تكون تصاعديا بداية من ادريس صفر ؟


في الاصل لا مشكل ان كنت تعرف نوع الذي تتعامل معه لاخذ الاحتياطات المشكل عندما يتم اجراء عمليات مختلطة بين signed و  unsigned  تسبب مشاكل للبرنامج ...الدالفي يستعمل كذلك الموجب و السالب لتحديد عدد العناصر Count و Length بالرغم انها تعبر عن ارقام موجبة فقط.

في المثال التالي يبين احدى المشاكل عند البحث على عنصر في قائمة Lixtbox  و تكون النتيجة سلبية 1- اي غير موجود ويتم حفظ هذه القيمة في المتغير Index الموجب فقط تتحول الى 255 و بالتالي تفشل المقارنة التي تاتي من بعد ..

كود :
var   Index:Byte;   .. begin   Index := Listbox1.Items.IndexOf('ououo');   if Index <> -1 then   begin     S:= Listbox1.Items[Index];     ..


TFileStream يتيح الولوج الى بيانات المخزنة التي يتم تحليلها و تحويلها مباشرة  الى المتغيرات و المكونات المعنية في في البرنامج في عملية متسلسلة ..
هنالك ملاحظة في غاية الاهمية TFileStream ليس سريع في قراة او الكتابة مثل MemoryStream لا يمكن قيام بتغير قيمة ادريس واحد في كل عملية قراءة او كتابة هذه عملية مرهقة لقرص الصلب خاصة نوع HDD الافضل في هذه الحالة هو فتح الملف كله او الجزء المعني في الذاكرة للتعامل معه .. مثل حالتك..  هناك بديل له هو TBufferdFileStream يقوم بفتح جزئيا الملف في الذاكرة


كود مقارنة بين الانواع الثلاث يقوم يتسجيل قيم من 0 الى 99999 في ملف.

كود :
procedure TForm2.tFileStreamClick(Sender: TObject); var   Fs:TFileStream;   I:integer; begin   if not SaveDlg.Execute then       Exit;   Fs:=TFileStream.Create(SaveDlg.FileName,fmCreate);//fmCreate create new file ..if exist delete it   try       for I := 0 to 99999 do       begin         Fs.Write(I,SizeOf(I));       end;   finally     Fs.Free;   end;   Showmessage('ok'); end; procedure TForm2.tBufferedStreamClick(Sender: TObject); var   Fs:TBufferedFileStream;   I:integer; begin   if not SaveDlg.Execute then       Exit;   Fs:=TBufferedFileStream.Create(SaveDlg.FileName,fmCreate,4096);//fmCreate create new file ..if exist delete it   try       for I := 0 to 99999 do       begin         Fs.Write(I,SizeOf(I));       end;   finally     Fs.Free;   end;   Showmessage('ok'); end; procedure TForm2.tMemoryStreamClick(Sender: TObject); var   Fs:TMemoryStream;   I:integer; begin   if not SaveDlg.Execute then       Exit;   Fs:=TMemoryStream.Create();   try       for I := 0 to 99999 do       begin         Fs.Write(I,SizeOf(I));       end;       Fs.SaveToFile(SaveDlg.FileName);//save the file   finally     Fs.Free;   end;   Showmessage('ok'); end;

إقتباس :اخيراً اخي وجدت في توثيق دلفي PByteArray مؤشر من نوع TByteArray جاهز للاستخدام , فلا احتاج الى تعريفه اليس كذلك؟

هو موجود لا داعي لاعادة تعريفه
[-] كل من 1 user says قال شكرا ل Ndagor على المشاركة المفيدة
  • ELARAPY
الرد


الردود في هذا الموضوع
RE: ما هي الملفات و كيف نتعامل معها ؟؟ - بواسطة Ndagor - 02-12-2022, 06:15 PM

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


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