الدرس التاسع والأربعون : System.IO - نسخة قابلة للطباعة +- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb) +-- قسم : الأقسام التعليمية - المنتدى القديم (http://vb4arb.com/vb/forumdisplay.php?fid=90) +--- قسم : قسم دورات المنتدى (http://vb4arb.com/vb/forumdisplay.php?fid=113) +---- قسم : دورة .net 2008 . لنبدأ سوياً (http://vb4arb.com/vb/forumdisplay.php?fid=138) +---- الموضوع : الدرس التاسع والأربعون : System.IO (/showthread.php?tid=5641) |
الدرس التاسع والأربعون : System.IO - oneyemenweb2 - 14-10-12 كاتب الموضوع احمد جمال بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته .نعود بعد انقطاع وهذه المرة مع .NET Base Class Libraries أو الفئات الاساسية في الدوت نت ، موعدنا اليوم مع الفئة System.IO والتي تنظم كافة عمليات الادخال والاخراج والتعامل مع الملفات . الفئات الاساسية في System.IO : [COLOR="#FF0000"] BinaryReader, BinaryWriter [/COLOR]: تتيح لك قراءة وكتابة بياناتك على شكل Binary Files . BufferedStream : مخزن مؤقت للبيانات Buffer التي يمكن أن تأخذ طريقها لاحقاً إلى الذاكرة .[COLOR="#FF0000"] Directory, DirectoryInfo [/COLOR]: مختص بالتعامل مع المجلدات والمعلومات المتعلقة بها . DriveInfo : مختص بالتعامل ومعرفة المعلومات عن وحدات التخزين في جهازك Driver . File, FileInfo : مختص بالتعامل مع الملفات وكل ما يتعلق بها . FileStream : يمكنك من الوصول للملفات وعرض البيانات على شكل Stream . FileSystemWatcher : مراقبة ملف او مجلد واخبارك بالتعديلات التي تطرأ عليه . Path : مختص بالتعامل مع المتغيرات النصية لتحويل المسارات إلى صور مفهومة لنظام التشغيل . StreamWriter, StreamReader : القراءة والكتابة إلى الملفات بصورة نصية . StringWriter, StringReader : نفس السابق ، فقط مع اختلاف ان ال Reader وال Writter يتم انشاءه من ال String . هناك فئات اخرى في هذا المجال من الاسماء ، ولكن هذه هي أشهرها وأكثرها استخداماً . الدرس التاسع والأربعون : System.IO - oneyemenweb2 - 14-10-12 الفوارق بين DirectoryInfo و Directory : الفارق الأساسي هو في ال structure الخاص بها ، حيث ان Directory مشتقة مباشرة من Object اما DirectoryInfo فهي مشتقة من FileStreamInfo المشتقة بدورها من ال Objects ، اما الفارق في التعامل فهو ان الفئة Directory تعرف دوالها من النوع Static بحيث يمكن استخدامها مباشرة ، اما مع DirectoryInfo فالامر مختلف حيث يتطلب الامر تعريف نسخة قبل استخدام الدوال . نفس الامر ينطبق بالتبعية على الفرق بين File و FileInfo ... كلا الفئتين DirectoryInfo و FileInfo تحمل معها الخصائص الاساسية ل FileStreamInfo اضافة لخصائص التعامل مع الملفات والمجلدات ، وهي : [COLOR="#008000"] Attributes : تختص بتمرير قيم اضافية للمجلد أو الملف عن طريق ال enumeration المسمى FileAttributes . CreationTime : قراءة وكتابة تاريخ الانشاء . Exists : معرفة هل الملف موجود أم لا . Extension : تعيد امتداد الملف . FullName : الحصول على المسار كاملاً للملف أو للمجلد . LastAccessTime : قراءة وكتابة آخر تاريخ للدخول على الملف او المجلد . LastWriteTime : قراءة وكتابة آخر تاريخ للكتابة في هذا الملف او المجلد . Name : معرفة اسم الملف أو المجلد .[/COLOR] الدرس التاسع والأربعون : System.IO - oneyemenweb2 - 14-10-12 الفئة DirectoryInfo : اضافة لاحتواءها على الخصائص السابقة من FileStreamInfo ، تحتوي هذه الفئة على الدوال التالية : [COLOR="#006400"]Create(), CreateSubdirectory() : انشاء مجلد او مجلد فرعي في المسار المحدد . Delete() : حذف المجلد وكامل محتوياته . GetDirectories() : تعيد مصفوفة من الاسماء توضح اسماء المجلدات الفرعية . GetFiles() : تعيد مصفوفة Array من FileInfo تحتوي على كافة الملفات الموجودة في هذا المجلد . MoveTo() : نقل المجلد وكافة محتوياته إلى مكان جديد . Parent : معرفة المجلد الاكبر من هذا المجلد . Root : لمعرفة ال Driver الخاص بهذا المجلد . [/COLOR] قبل البدء ، انت بحاجة لتعريف نسخة من هذه الفئة ، يمكنك تمرير المكان الذي تود البدء منه في المشيد Constructor بالشكل التالي مثلاً ( لمسار البرنامج ) : C#: كود : DirectoryInfo dir1 = new DirectoryInfo("."); vb.net: رمز برمجي: كود : Dim dir1 As New DirectoryInfo(".") او إلى مسار عادي : C#: رمز برمجي: كود : DirectoryInfo dir1 = new DirectoryInfo("C:\Ahmed"); vb.net: رمز برمجي: كود : Dim dir1 As New DirectoryInfo("C:\Ahmed") *** لو كنت مبرمج سي شارب فلا بد من عدم وضع \ وحدها داخل علامات التنصيص لإن لها استخدامات أخرى مثل \n \r وخلافه ، لكن يمكنك تحديد نوع البيانات بالداخل بأنها مباشرة عن طريق اضافة @ بالشكل التالي مثلاً : رمز برمجي: كود : DirectoryInfo dir1 = new DirectoryInfo(@"C:\Ahmed"); ليس فقط بامكانك الربط مع مجلد موجود ، بل يمكنك الربط إلى مجلد غير موجود ومن ثم انشاءه : C#: رمز برمجي: كود : DirectoryInfo dir1 = new DirectoryInfo(@"C:\Ahmed\Test"); vb.net: رمز برمجي: كود : Dim dir1 As New DirectoryInfo("C:\Ahmed\Test") يمكنك ايضاً استعراض كافة الملفات داخل المجلد : C#: رمز برمجي: كود : FileInfo[] imageFiles = dir.GetFiles(); vb.net: رمز برمجي: كود : Dim imageFiles As FileInfo() = dir.GetFiles() يمكنك استخدام خصائص FileSystemInfo التي تحتوي على كافة المعلومات المتعلقة بالمجلد ، فمثلاً لعرض تاريخ إنشاء المجلد : C#: رمز برمجي: كود : Console.WriteLine(dir1.CreationTime); vb.net: رمز برمجي: كود : Console.WriteLine(dir1.CreationTime) او يمكنك استعراض ملفات من نوع معين فقط ، مثلاً لاستعراض الملفات النصية فقط GIF ومن ثم كتابتها ، لا تنس ان الناتج من نوع FileInfo ويمكن تطبيق خصائص FileSsystemInfo عليها . C#: رمز برمجي: كود : using System; vb.net: Imports System Imports System.Collections.Generic Imports System.Linq Imports System.Text Imports System.IO Namespace ConsoleApplication7 Class Program Private Shared Sub Main(ByVal args As String()) Dim dir1 As New DirectoryInfo("C:\Users\Ahmed\Documents\Visual Studio 2008\WebSites\WebSite4") Dim imageFiles As FileInfo() = dir1.GetFiles("*.gif") For Each f As FileInfo In imageFiles Console.WriteLine("Name: {0} - Creation Date: {1} . " & Chr(10) & "" & Chr(10) & "", f.Name, f.CreationTime) Next Console.ReadKey() End Sub End Class End Namespace الناتج سيكون بالشكل التالي مثلاً : [ATTACH=CONFIG]907[/ATTACH] الدرس التاسع والأربعون : System.IO - oneyemenweb2 - 14-10-12 التعامل مع الفئة Directory لا شيء جديد ، فقط ستفقد الخصائص المتاحة من خلال الفئة FileSystemInfo وفي المقابل لن تكون محتاجاً لتعريف نسخة قبل البدء بالعمل ، لذا يمكنك العمل على الفئة مباشرة بالشكل التالي مثلاً لعملية الحذف : C#: كود : System.IO.Directory.Delete(@"C:\ahmed"); vb.net: كود : System.IO.Directory.Delete("C:\ahmed") الدرس التاسع والأربعون : System.IO - oneyemenweb2 - 14-10-12 التعامل مع الفئة DriveInfo : تتيح لك هذه الفئة استعراض ال Drivers في جهازك ومعرفة بعض المعلومات عنها ، هذا المثال مباشرة من كتاب Pro.CSharp 2008 : C#: كود : Console.WriteLine("***** Fun with DriveInfo *****\n"); vb.net: كود : Console.WriteLine("***** Fun with DriveInfo *****" & Chr(10) & "") الدرس التاسع والأربعون : System.IO - oneyemenweb2 - 14-10-12 التعامل مع FileInfo : الدوال الرئيسية في هذه الفئة - اضافة بالطبع للخصائص العادية - : AppendText() : انشاء StreamWritter للكتابة في الملف CopyTo() نسخ . Create() انشاء ملف واعادة كائن FileStream CreateText() : انشاء StreamWriter للكتابة في الملف Delete() : حذف الملف Directory : معرفة اسم المجلد DirectoryName : معرفة مسار المجلد Length : معرفة حجم الملف MoveTo() : النقل ، يمكنك تحديد اسم جديد للملف المنقول Name : اسم الملف Open() : فتح الملف مع امكانية القراءة والكتابة وخلافه OpenRead() : فتح الملف للقراءة فقط OpenText() : فتح الملف باستخدام StreamReader OpenWrite() : فتح الملف للكتابة فقط بعيداً عن خواص StreamReader والتي سنتعرف عليها تفصيلاً في جزء لاحق من هذه الدروس . سنتعرف على باقي الخصائص . لانشاء ملف مثلاً باستخدام Create : C#: كود : FileInfo f = new FileInfo(@"C:\Test.txt"); vb.net: كود : Dim f As New FileInfo("C:\Test.txt") طبعاً لا تنس أن بامكانك استخدام أي من الخصائص الموجودة في FileSystemInfo كما سبق ، فقط الخاصية Attributes هي خاصية مميزة نوعاً ما حيث تشمل عدة تفاصيل ، حيث يمكنك من خلالها تحديد إذا كان الملف مخفي ام ظاهر ، للقراءة فقط ... الخ . مثلاً لمعرفة هل الملف مخفي أم لا ؟ C#: كود : if ((File.GetAttributes(path) & FileAttributes.Hidden) == FileAttributes.Hidden) vb.net: كود : If (File.GetAttributes(path) And FileAttributes.Hidden) = FileAttributes.Hidden Then أما لاخفاء الملف نستخدم المعامل OR بالشكل التالي مثلاً : C#: كود : File.SetAttributes(path, File.GetAttributes(path) | FileAttributes.Hidden); vb.net: كود : File.SetAttributes(path, File.GetAttributes(path) Or FileAttributes.Hidden) الدرس التاسع والأربعون : System.IO - oneyemenweb2 - 14-10-12 انشاء وفتح الملفات باستخدام Open : في الكود التالي ستجد اننا نستخدم الدالة Open مع الخاصية FileMode.OpenOrCreate وهي ما تفيد انه لو وجدت الملف قم بفتحه ، لو لم تجده قم بانشاءه : C#: كود : FileInfo f2 = new FileInfo(@"C:\Test2.txt"); VB.net: كود : Dim f2 As New FileInfo("C:\Test2.txt") كود : Dim fs2 As FileStream = f2.Open(FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None) هناك حالات أخرى أيضاً لفتح وانشاء الملفات : [COLOR="#008000"] CreateNew : انشأ ملف جديد مباشرة ، لو وجدته قم بعمل خطأ IOException Create : قم بانشاء ملف ولو وجدته قم بانشاءه فوق الموجود . Open افتح الملف ولو لم تجده قم بعمل خطأ FileNotFoundException OpenOrCreate : افتح الملف لو كان موجود أو انشأه لو لم يكن موجوداً . Truncate : افتح الملف وامسح كافة محتوياته Append : قم بفتح الملف وانتقل لآخره لبدء عملية الكتابة ، لو لم يكن الملف موجوداً قم بفتح واحد جديد والبدء بالكتابة من أوله ، عموماً هي لا تظهر في حالة الفتح باستخدام Open وإنما فقط في حالة OpenWrite . [/COLOR] ال FileAccess ايضاً له ثلاث حالات مجموعة في هذا ال enum . كود : public enum FileAccess كود : { ال FileShare أيضاً : كود : public enum FileShare الدرس التاسع والأربعون : System.IO - oneyemenweb2 - 14-10-12 فتح وانشاء الملفات باستخدام OpenRead و OpenWrite : مثل ما سبق ، عدا انك ستكون ملزماً بنوع واحد فقط من العمليات . فتح الملفات باستخدام OpenText : الفارق الوحيد هو ان القيمة المعادة تكون من نوع StreamReader وليس FileStream ، بالشكل التالي مثلاً : C#: كود : FileInfo f5 = new FileInfo(@"C:\boot.ini"); vb.net: كود : Dim f5 As New FileInfo("C:\boot.ini") الفتح باستخدام CreateText و AppendText : مثل السابقة ، الفارق فقط يمكن ان القيمة المعادة ستكون من نوع StreamWritter . الدرس التاسع والأربعون : System.IO - oneyemenweb2 - 14-10-12 التعامل مع الفئة File : نفس ما ذكرنا في حالة المجلدات ، لن تكون مجبراً على تعريف نسخة منها نظراً لإنها Static بل يمكنك العمل عليها مباشرة . هناك دوال أخرى جديدة في الفئة لعمليات القراءة والكتابة هي : [COLOR="#008000"] ReadAllBytes() : قراءة البيانات على شكل array of bytes ReadAllLines() : قراءة البيانات على شكل مصفوفة من الاسطر . ReadAllText() : قراءة جميع البيانات كتلة واحدة . WriteAllBytes() : كتابة byte by byte WriteAllLines() : الكتابة على شكل اسطر . WriteAllText() : الكتابة ككتلة واحدة .[/COLOR] ويمكن استخدامهم بالشكل التالي مثلاً - من كتاب ProCSharp 2008: C#: كود : string[] myTasks = { vb.net: كود : Dim myTasks As String() = {"Fix bathroom sink", "Call Dave", "Call Mom and Dad", "Play Xbox 360"} الدرس التاسع والأربعون : System.IO - oneyemenweb2 - 14-10-12 معلومة اضافية : *** في .net ، يمكن للفئة إذا كانت implemented ل IDisposable ان نقوم بتعريفها في مكان ومن ثم حذفها خارج هذا النطاق بالشكل التالي مثلاً : C#: كود : using (CarClass newCare) كود : Using newCare As CarClass لذا سنحاول استخدامها ايضاً مع الملفات حتى لا تبقى معلقة في الذاكرة بالشكل التالي مثلاً : C#: كود : FileInfo f = new FileInfo(@"C:\test.txt"); كود : Dim f As New FileInfo("C:\test.txt") إلى هنا نكون قد انتهينا من دروس هذا اليوم ، نواصل غداً إن شاء الله مع دروس Stream . [COLOR="#00FF00"]والله الموفق ... والسلام عليكم ورحمة الله وبركاته .[/COLOR] |