الشبكة العربية لمطوري الألعاب

مبتدئ  kenan aboud هذه المشاركة مميزة مشاركة 1

فيم تستخدم هذه الدالة؟

تستخدم الدالة Open فى فتح ملف فى الذاكرة لغرض معين مثل القراءة منه او الكتابه فيه وقد اعتمدت على هذه الدالة فى برنامجى للتشفير والذى وضعت وصلته فى الجامعة منذ فترة وسنرى كيف نستطيع بكل سهولة منع المستخدم من حذف او تعديل او نسخ او فتح ملف بواسطة هذه الدالة

كيف تكتب؟

Open FileName For OpenMethod As #FileNumber

حيث:
FileName : اسم الملف المراد فتحه ويكون متغير من النوع String
OpenMethod : غرض الفتح
FileNumber : الرقم الذى سيستخدم للاشارة الى الملف وهو مفتوح ويكون رقم صحيح بين 1-512 ويكون متغير من النوع Integer

اغراض فتح الملف هى :
1- فتح للقراءة من الملف ونستبدل الكلمة OpenMethod بالكلمة Input
2- فتح لمسح مابداخل الملف وكتابة بيانات جديدة ونستبدل OpenMethod بالكلمة OutPut
3- فتح لاضافة بيانات على الموجودة داخل الملف ونكتب Append
4- فتح للغرض الثنائى ونكتب Binary وهذه الطريقة تستخدم تحديداً مع الملفات التنفيذية وان كنا نستطيع استخدامها مع اى نوع من الملفات لكن يفضل الا تستخدم الا مع هذا النوع
5- فتح للغرض العشوائى ونكتب Random وتستخدم اذا كنا لانستطيع تحديد الغرض الذى نفتح بسببه الملف

##عندما نريد ان نكتب داخل الملف يوجد امران هما Print , Write والفرق بينهما ان Write يطبع النص بين علامتى اقتباس ("")

##لإغلاق الملف المفتوح نستخدم الامر Close ثم نمرر له رقم الملف Close #1 واذا اردنا اغلاق جميع الملفات المفتوحة فيمكن استخدام الامر Reset عملاً بأن التعديلات التى نجريها على الملف لن تظهر الا بعد اغلاقه

##عند الفتح بواسطة الكلمات المحجوزة (OutPut , Random , Binary , Append) سيقوم البرنامج بانشاء الملف اذا لم يجده فى المكان المحدد

تطبيقات على الدالة Open
قم بعمل ملف نصى على المشغل C وسمه Test.txt والذى سنجرى عليه التطبيقات ثم افتح مشروعك وادرج اداتى مربع نص وزر امر حيث سنكتب الكلام المراد اضافته فى مربع النص وننفذ الكود عند الضغط على زر الامر وغير خاصية MultiLine لمربع النص الى True وخاصية ScrollBars الى Both

(1) تطبيق غرض مسح بيانات الملف واضافة بيانات جديدة OutPut
الان الملف لايحتوى على اى بيانات ونريد ان نكتب بداخله الجملة "انا اعشق البرمجة"
اكتب الجملة داخل مربع النص ثم اكتب الكود

Private Sub Command1_Click()
Open "C:\Test.txt" For OutPut As #1
Print #1, Text1.Text
Close #1
End Sub

اذهب الى الملف وستجد ان الجملة قد اضيفت

(2) تطبيق غرض اضافة بيانات على البيانات الموجودة فى الملف Append
يحتوى الان الملف على الجملة التى أضفناها وهى "انا اعشق البرمجة" ونريد ان نضيف الجملة "جامعة الناجحين" الى الملف
بنفس الطريقة ستكتب الجملة فى مربع النص وستكتب الكود التالى
Private Sub Command1_Click()
Open "C:\Test.txt" For Append As #1
Print #1, Text1.Text
Close #1
End Sub

3) تطبيق غرض قراءة البيانات Input
بيانات الملف الان هى (انا اعشق البرمجة - جامعة الناجحين)
نريد ان نقرأ هذه البيانات من الملف ووضعها فى مربع النص
لدينا طريقتين لهذا الغرض

الطريقة الاولى هى قراءة الملف سطر سطر بواسطة الحلقات التكرارية
والطريقة الثانية باستخدام الدالة Lof وسنرى الان كيفية استخدام الطريقتين

## عند فتح الملف لغرض القراءة منه يجب وضع اسم الملف فى متغير وتمرير المتغير للدالة Open ثم لدالة القراءة Input او Line Input
1- بواسطة الحلقات التكرارية
يجب أن نعرف اننا عندما نقرأ سطر من ملف ينتقل مؤشر القراءة الى السطر التالى وهكذا الى نهاية الملف واذا لم نعطه شرط بالتوقف عند نهاية الملف فستظهر لنا رسالة خطأ والدالة التى تدلنا اذا كان المؤشر وصل الى نهاية الملف ام لا هى الدالة EOF ومعاملها هو رقم الملف وتعود بالقيمة True اذا كنا فى نهاية الملف وسيكون الكود كالتالى

Private Sub Command1_Click()
Dim F$
F = "C:\Test.txt"
Open F For Input As #1
Do While EOF(1) = False
DoEvents
Input #1, F
If Text1.Text = "" Then
Text1.Text = F
Else
Text1.Text = Text1.Text & vbNewLine & F
End If
Loop
Close #1
End Sub

لاحظ اننا استخدمنا الثابت vbNewLine والذى يحاكى الضغط على زر Enter اى يقوم بالكتابة فى سطر جديد

##ملحوظة هامة :
قم بفتح الملف ثم عدل السطر الاول من "انا اعشق البرمجة" الى "انا اعشق البرمجة , بلغة الفيجوال بيسيك" ثم طبق الكود السابق
ستلاحظ انه عند وضع البيانات فى مربع النص تم وضع الجملة "انا اعشق البرمجة"فى سطر والجملة "بلغة الفيجوال بيسيك" فى سطر اخر اى ان الرمز "," يعطى سطراً جديداً عند القراءة ولتلافى هذه المشكلة نستبدل الكود السابق بهذا الكود


Private Sub Command1_Click()
Dim F$
F = "C:\Test.txt"
Open F For Input As #1
Do While EOF(1) = False
DoEvents
Line Input #1, F
If Text1.Text = "" Then
Text1.Text = F
Else
Text1.Text = Text1.Text & vbNewLine & F
End If
Loop
Close #1
End Sub

الان طبق الكود وسترى النتيجة

2- بواسطة الدالة LOF
الكود بسيط جداً

Private Sub Command1_Click()
Dim F$
F = "g:\Test.txt"
Open F For Input As #1
Text1.Text = Input(LOF(1), 1)
Close #1
End Sub

حيث ان الدالة LOF تعود بحجم الملف بالبايت او عدد البايتات التى يحتويها الملف
اى ان الجملة

Text1.Text = Input(LOF(1), 1)

ستقوم بقراءة جميع البايتات التى يحتويها الملف الذى رقمه هو 1 وتضع البيانات فى مربع النص

(4) تطبيق الغرض الثنائى Binary

الطريقة: Open FileName For Binary As #FileNumber
يمكننا عند فتح الملف لهذا الغرض قراءة او كتابة بيانات داخل الملف اى انها تعمل عمل الطريقة Append والطريقة Input معاً لكن توجد فروق هامة يجب ملاحظتها وهى:
(1) عند التعامل معه كالطريقة Append
عند فتح الملف للغرض الثنائى يتم التعامل مع الملف بنظام البايتات اى اننا عند الاضافة لاتتم اضافة بيانات وانما يتم التعديل على البايتات التى ستخزن فيها البيانات الجديدة وتتم الكتابة باستخدام الكلمة Put
هذه النقطة من الصعب شرحها لكن المثال التالى سيوضحها أكثر
ضع ملفاً فى المسار "C:\Test.txt" واكتب داخله

xxxxx الناجحين
الفريق العربى
المحيط العربى
جامعة دمشق

اضف اداة زر امر واكتب الكود التالى

Private Sub Command1_Click()
Open "C:\Test.txt" For Binary As #1
Put #1, , "منتدى الناجحين"
Close #1
End Sub

الان افتح الملف وستجد ان الجملة "xxxxx الناجحين" قد تم تعديلها الى "منتدى الناجحين" وهذا يعنى انه تم التعديل فى البايتات التى تحتوى على الجملة الاولى
الجملة Put لها ثلاث معاملات الاول هو رقم الملف المفتوح والثانى هو رقم البايت الذى سنبدأ من عنده التعديل والثالث البيانات الجديدة التى سيتم كتابتها
مثال: نفس الملف السابق غير جملة "xxxxx الناجحين" الى "منتدى xxxxxxxx" ثم اكتب الكود التالى

Private Sub Command1_Click()
Open "C:\Test.txt" For Binary As #1
Put #1, 7, "الناجحين"
Close #1
End Sub

افتح الملف ولاحظ النتيجة
أرجو أن تكون هذه النقطة قد وضحت وزال غموضها لأنها مهمة جداً
(2) التعامل معه كالطريقة Input
نستخدم للقراءة الكلمة Get ونمرر للمعامل الاول رقم الملف والمعامل الثانى بايت بداية القراءة والمعامل الثالث المتغير الذى سيحمل البيانات ويجب ان يكون متغير معرف على انه من النوع String علماً بأن عدد البايتات التى سيتم قرائتها تتحدد حسب طول المتغير الذى سيحمل البيانات
لنفرض ان اول جملة فى الملف السابق هى "منتدى الناجحين" ونريد قرائتها ووضعها فى مربع نص
عدد حروف الجملة هى 14 اذاً يجب أن يكون طول المتغير هو 14 لذلك نضع 14 مسافة داخل المتغير عن طريق الدالة Space

Private Sub Command4_Click()
Dim D$
D = Space(14)
Open "C:\Test.txt" For Binary As #1
Get #1, , D
Text1.Text = D
Close #1
End Sub

اذا غيرت الرقم 14 الممرر للدالة Space الى 5 سيتم قراءة الكلمة "منتدى" فقط
الان نريد أن نقرأ كلمة "الناجحين" فقط فكيف سيكون الكود؟؟
هنا يجب أن نستخدم المعامل الثانى والذى يعبر عن بداية القراءة ومن المفروض ان يكون 7 وعدد حروف كلمة الناجحين هو "8" وسيتم تمريره للدالة Space وبذلك يكون الكود

Private Sub Command4_Click()
Dim D$
D = Space(8)
Open "C:\Test.txt" For Binary As #1
Get #1, 7, D
Text1.Text = D
Close #1
End Sub

جرب الكود وستجد ان مربع النص كُتب بداخله كلمة "الناجحين"
علماً بأنه عند استخدام هذه الطريقة داخل حلقة تكرارية فان بداية القراءة ستكون من نهاية القراءة فى الدورة السابقة

كيف يمكن تشفير ملف بواسطة الدالة Open
فى هذه الحالة ستتغير طريقة الكتابة الى
Open FileName For OpenMethode Lock LockType As #FileNumber

مايأتى بعد الكلمة Lock هو الذى يحدد نوع الاغلاق
(1) حماية من القراءة (الفتح) نستبدل LockType بالكلمة Read
(2) حماية من التعديل نكتب Write
(3) حماية مزدوجة نكتب Read Write

عند استخدام حماية القراءة ستمنع المستخدم من فتح الملف وحماية التعديل ستمنع المستخدم من تعديل بيانات الملف علماً بأنه عند استخدام اى طريقة من هذه الطرق يمنع نسخ الملف او حذفه او نقله من مكانه لكن لابد ان يظل الملف مفتوحاً وذلك بحذف الامر Close من الكود وكتابته عندما نريد ان نفتح الملف للمستخدم ويفضل عند الحماية بهذه الطرق ان يكون الفتح لاحد الغرضين (Input , Random)

لدينا الان ملف التجارب "C:\Test.txt" سنحميه الان من القراءة

Private Sub Command1_Click()
Open "C:\Test.txt" For Input Lock Read As #1
End Sub

حاول فتح الملف ولاحظ بنفسك

الان سنحميه من التعديل

Private Sub Command1_Click()
Open "C:\Test.txt" For Input Lock Write As #1
End Sub

افتح الملف سيفتح معك لكن حاول تعديل بياناته واغلاق الملف ستظهر لك رسالة تنبيه بالحفظ اضغط "Yes" ولاحظ النتيجة

الحماية المزدوجة ستحمى الملف من الفتح او التعديل

Private Sub Command1_Click()
Open "C:\Test.txt" For Input Lock Read Write As #1
End Sub

لفك التشفير عن الملف نكتب الكود

Private Sub Command1_Click()
Close #1
End Sub

الان تعرفنا على طريقة بسيطة جداً للتشفير وفى نفس الوقت غاية فى القوة بالنسبة للويندوز

بقيت عندى ملحوظة رأيت أن أتركها لنهاية الدرس

## عند تحديد رقم الملف عند فتحه يجب ان نتأكد أولا من أنه لايوجد ملف اخر مفتوح بنفس الرقم لانه ان وجد فستظهر رسالة معناها ان الملف مفتوح بالفعل ولتفادى هذه المشكلة وفرت لك بيئة الفيجوال بيسيك الدالة FreeFile والتى تعود بأول رقم يمكن اعطاؤه للملف عند الفتح وتستخدم كالتالى

Private Sub Command1_Click()
Dim N%
N =FreeFile
Open FileName For OpenMethod As #N
End Sub

وعند الاغلاق نمرر المعامل N الى الدالة Close

Private Sub Command1_Click()
Close #N
End Sub


الان انتهى الدرس البسيط وارجو ان تكونوا قد استفدتم منه

مبتدئ  وليد طه مشاركة 2

جميل جدا ! بالفعل الكود الذي طرحته سيساعدني في توفير الوقت شكرا!!
طريقة التشفير مثيرة للاهتمام لكن عندي سؤال
على حسب ما فهمت منها انها تبقى طالما انك نفذت الدالة open ولم تنفذ الدالة close.
يعني إذا بالبرنامج تبعي قمت بتنفيذ الدالة open ولم أنفذ close فهل يعني ان الملف سيبقى مشفراً للأبد؟ وعندها أتخيل انه يمكنني فك التشفير بتنفيذ برنامجي مرة أخرى واستدعاء الدالة close على الملف بنفس الرقم؟ هذه ميزة قوية جداً

ومبروك المشاركة المميزة (; تستاهل!

وليد طه

مبتدئ  عبد الحميد محسن باجابر مشاركة 3

ما شاء الله  شرح جميل شكراً