العودة   منتدى رياض الجنة - Riad Al-Ganah > الرياض التقنية > روضة الكورسات والدورات التقنية والعلمية > روضة دورات تقنية الـ .NET بلغاتها المختلفة > دورة .NET 2008 من منتدى فيجوال بيسك للعرب

دورة .NET 2008 من منتدى فيجوال بيسك للعرب مقدم الدورة : أحمد جمال ، نوع الدورة : كتابية مصحوبة بصور ، حالة الدورة : انتهت ، عدد الدروس : 80 درس . مستوى الدورة : من البداية للاحتراف .

إضافة رد

 
أدوات الموضوع انواع عرض الموضوع
  #1  
قديم 02-28-2010, 10:15 PM
الصورة الرمزية khaledbelal
khaledbelal khaledbelal غير متواجد حالياً
مبرمج المنتدى
الادارة تكليف لا تشريف
 
تاريخ التسجيل: Oct 2009
العمر: 34
المشاركات: 3,606
افتراضي الدرس التاسع والأربعون : System.IO - دورة .net 2008

بسم الله الرحمن الرحيم .
السلام عليكم ورحمة الله وبركاته .

نعود بعد انقطاع وهذه المرة مع .NET **** Class Libraries أو الفئات الاساسية في الدوت نت ، موعدنا اليوم مع الفئة System.IO والتي تنظم كافة عمليات الادخال والاخراج والتعامل مع الملفات .

الفئات الاساسية في System.IO :

BinaryReader, BinaryWriter : تتيح لك قراءة وكتابة بياناتك على شكل Binary Files .
BufferedStream : مخزن مؤقت للبيانات Buffer التي يمكن أن تأخذ طريقها لاحقاً إلى الذاكرة .
Directory, DirectoryInfo : مختص بالتعامل مع المجلدات والمعلومات المتعلقة بها .
DriveInfo : مختص بالتعامل ومعرفة المعلومات عن وحدات التخزين في جهازك Driver .
File, FileInfo : مختص بالتعامل مع الملفات وكل ما يتعلق بها .
FileStream : يمكنك من الوصول للملفات وعرض البيانات على شكل Stream .
FileSystemWatcher : مراقبة ملف او مجلد واخبارك بالتعديلات التي تطرأ عليه .
Path : مختص بالتعامل مع المتغيرات النصية لتحويل المسارات إلى صور مفهومة لنظام التشغيل .
StreamWriter, StreamReader : القراءة والكتابة إلى الملفات بصورة نصية .
StringWriter, StringReader : نفس السابق ، فقط مع اختلاف ان ال Reader وال Writter يتم انشاءه من ال String .

هناك فئات اخرى في هذا المجال من الاسماء ، ولكن هذه هي أشهرها وأكثرها استخداماً .

الفوارق بين DirectoryInfo و Directory :

الفارق الأساسي هو في ال structure الخاص بها ، حيث ان Directory مشتقة مباشرة من Object اما DirectoryInfo فهي مشتقة من FileStreamInfo المشتقة بدورها من ال Objects ، اما الفارق في التعامل فهو ان الفئة Directory تعرف دوالها من النوع Static بحيث يمكن استخدامها مباشرة ، اما مع DirectoryInfo فالامر مختلف حيث يتطلب الامر تعريف نسخة قبل استخدام الدوال .
نفس الامر ينطبق بالتبعية على الفرق بين File و FileInfo ...
كلا الفئتين DirectoryInfo و FileInfo تحمل معها الخصائص الاساسية ل FileStreamInfo اضافة لخصائص التعامل مع الملفات والمجلدات ، وهي :

Attributes : تختص بتمرير قيم اضافية للمجلد أو الملف عن طريق ال enumeration المسمى FileAttributes .
CreationTime : قراءة وكتابة تاريخ الانشاء .
Exists : معرفة هل الملف موجود أم لا .
Extension : تعيد امتداد الملف .
FullName : الحصول على المسار كاملاً للملف أو للمجلد .
LastAccessTime : قراءة وكتابة آخر تاريخ للدخول على الملف او المجلد .
LastWriteTime : قراءة وكتابة آخر تاريخ للكتابة في هذا الملف او المجلد .
Name : معرفة اسم الملف أو المجلد .

الفئة DirectoryInfo :

اضافة لاحتواءها على الخصائص السابقة من FileStreamInfo ، تحتوي هذه الفئة على الدوال التالية :

Create(), CreateSubdirectory() : انشاء مجلد او مجلد فرعي في المسار المحدد .
Delete() : حذف المجلد وكامل محتوياته .
GetDirectories() : تعيد مصفوفة من الاسماء توضح اسماء المجلدات الفرعية .
GetFiles() : تعيد مصفوفة Array من FileInfo تحتوي على كافة الملفات الموجودة في هذا المجلد .
MoveTo() : نقل المجلد وكافة محتوياته إلى مكان جديد .
Parent : معرفة المجلد الاكبر من هذا المجلد .
Root : لمعرفة ال Driver الخاص بهذا المجلد .

قبل البدء ، انت بحاجة لتعريف نسخة من هذه الفئة ، يمكنك تمرير المكان الذي تود البدء منه في المشيد Constructor بالشكل التالي مثلاً ( لمسار البرنامج ) :

C#:
كود PHP:
DirectoryInfo dir1 = new DirectoryInfo("."); 
vb.net:
كود PHP:
Dim dir1 As New DirectoryInfo("."
او إلى مسار عادي :

C#:
كود PHP:
DirectoryInfo dir1 = new DirectoryInfo("C:\Ahmed"); 
vb.net:
كود PHP:
Dim dir1 As New DirectoryInfo("C:\Ahmed"
*** لو كنت مبرمج سي شارب فلا بد من عدم وضع \ وحدها داخل علامات التنصيص لإن لها استخدامات أخرى مثل \n \r وخلافه ، لكن يمكنك تحديد نوع البيانات بالداخل بأنها مباشرة عن طريق اضافة @ بالشكل التالي مثلاً :
كود PHP:
DirectoryInfo dir1 = new DirectoryInfo(@"C:\Ahmed"); 
ليس فقط بامكانك الربط مع مجلد موجود ، بل يمكنك الربط إلى مجلد غير موجود ومن ثم انشاءه :
C#:
كود PHP:
DirectoryInfo dir1 = new DirectoryInfo(@"C:\Ahmed\Test");
dir1.Create(); 
vb.net:
كود PHP:
Dim dir1 As New DirectoryInfo("C:\Ahmed\Test"
dir1.Create() 
يمكنك ايضاً استعراض كافة الملفات داخل المجلد :
C#:
كود PHP:
FileInfo[] imageFiles dir.GetFiles(); 
vb.net:
كود PHP:
Dim imageFiles As FileInfo() = dir.GetFiles() 
يمكنك استخدام خصائص FileSystemInfo التي تحتوي على كافة المعلومات المتعلقة بالمجلد ، فمثلاً لعرض تاريخ إنشاء المجلد :

C#:
كود PHP:
Console.WriteLine(dir1.CreationTime); 
vb.net:
كود PHP:
Console.WriteLine(dir1.CreationTime
او يمكنك استعراض ملفات من نوع معين فقط ، مثلاً لاستعراض الملفات النصية فقط GIF ومن ثم كتابتها ، لا تنس ان الناتج من نوع FileInfo ويمكن تطبيق خصائص FileSsystemInfo عليها .

C#:
كود PHP:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace 
ConsoleApplication7
{
    class 
Program
    
{
        static 
void Main(string[] args)
        {
            
DirectoryInfo dir1 = new DirectoryInfo(@"C:\Users\Ahmed\********s\Visual Studio 2008\WebSites\WebSite4");
            
FileInfo[] imageFiles dir1.GetFiles("*.gif");
            foreach (
FileInfo f in imageFiles)
            {
                
Console.WriteLine("Name: {0} - Creation Date: {1} . \n\n"f.Namef.CreationTime);
            }
            
Console.ReadKey();
        }
    }

vb.net:
كود PHP:
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\********s\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.Namef.CreationTime
            
Next 
            
            Console
.ReadKey() 
        
End Sub 
    End 
Class 
End Namespace 
الناتج سيكون بالشكل التالي مثلاً :



التعامل مع الفئة Directory

لا شيء جديد ، فقط ستفقد الخصائص المتاحة من خلال الفئة FileSystemInfo وفي المقابل لن تكون محتاجاً لتعريف نسخة قبل البدء بالعمل ، لذا يمكنك العمل على الفئة مباشرة بالشكل التالي مثلاً لعملية الحذف :

C#:
كود PHP:
System.IO.Directory.Delete(@"C:\ahmed"); 
vb.net:

System.IO.Directory.Delete("C:\ahmed")

التعامل مع الفئة DriveInfo :

تتيح لك هذه الفئة استعراض ال Drivers في جهازك ومعرفة بعض المعلومات عنها ، هذا المثال مباشرة من كتاب Pro.CSharp 2008 :

C#:
كود PHP:

Console
.WriteLine("***** Fun with DriveInfo *****\n");
// Get info regarding all drives.
DriveInfo[] myDrives DriveInfo.GetDrives();
// Now print drive stats.
foreach(DriveInfo d in myDrives)
{
Console.WriteLine("Name: {0}"d.Name);
Console.WriteLine("Type: {0}"d.DriveType);
// Check to see whether the drive is mounted.
if (d.IsReady)
{
Console.WriteLine("Free space: {0}"d.TotalFreeSpace);
Console.WriteLine("Format: {0}"d.DriveFormat);
Console.WriteLine("Label: {0}"d.VolumeLabel);
Console.WriteLine();
}
}
Console.ReadLine(); 
vb.net:
كود PHP:
Console.WriteLine("***** Fun with DriveInfo *****" Chr(10) & ""
' Get info regarding all drives. 
Dim myDrives As DriveInfo() = DriveInfo.GetDrives() 
Now print drive stats
For 
Each d As DriveInfo In myDrives 
    Console
.WriteLine("Name: {0}"d.Name
    
Console.WriteLine("Type: {0}"d.DriveType
    
' Check to see whether the drive is mounted. 
    If d.IsReady Then 
        Console.WriteLine("Free space: {0}", d.TotalFreeSpace) 
        Console.WriteLine("Format: {0}", d.DriveFormat) 
        Console.WriteLine("Label: {0}", d.VolumeLabel) 
        Console.WriteLine() 
    End If 
Next 
Console.ReadLine() 

التعامل مع FileInfo :

الدوال الرئيسية في هذه الفئة - اضافة بالطبع للخصائص العادية - :

AppendText() : انشاء StreamWritter للكتابة في الملف
CopyTo() نسخ .
Create() انشاء ملف واعادة كائن FileStream
CreateText() : انشاء StreamWriter للكتابة في الملف
Delete() : حذف الملف
Directory : معرفة اسم المجلد
DirectoryName : معرفة مسار المجلد
Length : معرفة حجم الملف
MoveTo() : النقل ، يمكنك تحديد اسم جديد للملف المنقول
Name : اسم الملف
Open() : فتح الملف مع امكانية القراءة والكتابة وخلافه
OpenRead() : فتح الملف للقراءة فقط
OpenText() : فتح الملف باستخدام StreamReader
OpenWrite() : فتح الملف للكتابة فقط

بعيداً عن خواص StreamReader والتي سنتعرف عليها تفصيلاً في جزء لاحق من هذه الدروس . سنتعرف على باقي الخصائص .
لانشاء ملف مثلاً باستخدام Create :

C#:
كود PHP:
FileInfo f = new FileInfo(@"C:\Test.txt");
FileStream fs f.Create();
vb.net:
رمز:
Dim f As New FileInfo("C:\Test.txt"
Dim fs As FileStream f.Create() 
طبعاً لا تنس أن بامكانك استخدام أي من الخصائص الموجودة في FileSystemInfo كما سبق ، فقط الخاصية Attributes هي خاصية مميزة نوعاً ما حيث تشمل عدة تفاصيل ، حيث يمكنك من خلالها تحديد إذا كان الملف مخفي ام ظاهر ، للقراءة فقط ... الخ .

مثلاً لمعرفة هل الملف مخفي أم لا ؟

C#:
كود PHP:
if ((File.GetAttributes(path) & FileAttributes.Hidden) == FileAttributes.Hidden
vb.net:
كود PHP:
If (File.GetAttributes(path) And FileAttributes.Hidden) = FileAttributes.Hidden Then 
أما لاخفاء الملف نستخدم المعامل OR بالشكل التالي مثلاً :

C#:
كود PHP:
File.SetAttributes(pathFile.GetAttributes(path) | FileAttributes.Hidden); 
vb.net:
كود PHP:
File.SetAttributes(pathFile.GetAttributes(path) Or FileAttributes.Hidden

انشاء وفتح الملفات باستخدام Open :

في الكود التالي ستجد اننا نستخدم الدالة Open مع الخاصية FileMode.OpenOrCreate وهي ما تفيد انه لو وجدت الملف قم بفتحه ، لو لم تجده قم بانشاءه :

C#:
كود PHP:
FileInfo f2 = new FileInfo(@"C:\Test2.txt");
FileStream fs2 f2.Open(FileMode.OpenOrCreate,FileAccess.ReadWriteFileShare.None); 
VB.net:
كود PHP:
Dim f2 As New FileInfo("C:\Test2.txt")

Dim fs2 As FileStream f2.Open(FileMode.OpenOrCreateFileAccess.ReadWriteFileShare.None

هناك حالات أخرى أيضاً لفتح وانشاء الملفات :

CreateNew : انشأ ملف جديد مباشرة ، لو وجدته قم بعمل خطأ IOException
Create : قم بانشاء ملف ولو وجدته قم بانشاءه فوق الموجود .
Open افتح الملف ولو لم تجده قم بعمل خطأ FileNotFoundException
OpenOrCreate : افتح الملف لو كان موجود أو انشأه لو لم يكن موجوداً .
Truncate : افتح الملف وامسح كافة محتوياته
Append : قم بفتح الملف وانتقل لآخره لبدء عملية الكتابة ، لو لم يكن الملف موجوداً قم بفتح واحد جديد والبدء بالكتابة من أوله ، عموماً هي لا تظهر في حالة الفتح باستخدام Open وإنما فقط في حالة OpenWrite .

ال FileAccess ايضاً له ثلاث حالات مجموعة في هذا ال enum .

كود PHP:
public enum FileAccess

{
Read,
Write,
ReadWrite

ال FileShare أيضاً :
كود PHP:
public enum FileShare
{
None,
Read,
Write,
ReadWrite

فتح وانشاء الملفات باستخدام OpenRead و OpenWrite :

مثل ما سبق ، عدا انك ستكون ملزماً بنوع واحد فقط من العمليات .

فتح الملفات باستخدام OpenText :
الفارق الوحيد هو ان القيمة المعادة تكون من نوع StreamReader وليس FileStream ، بالشكل التالي مثلاً :
C#:
كود PHP:
FileInfo f5 = new FileInfo(@"C:\boot.ini");
StreamReader sreader f5.OpenText(); 
vb.net:
كود PHP:
Dim f5 As New FileInfo("C:\boot.ini"
Dim sreader As StreamReader f5.OpenText() 

الفتح باستخدام CreateText و AppendText :

مثل السابقة ، الفارق فقط يمكن ان القيمة المعادة ستكون من نوع StreamWritter .
كود PHP:
التعامل مع الفئة File 
نفس ما ذكرنا في حالة المجلدات ، لن تكون مجبراً على تعريف نسخة منها نظراً لإنها Static بل يمكنك العمل عليها مباشرة .
هناك دوال أخرى جديدة في الفئة لعمليات القراءة والكتابة هي :

ReadAllBytes() : قراءة البيانات على شكل array of bytes
ReadAllLines() : قراءة البيانات على شكل مصفوفة من الاسطر .
ReadAllText() : قراءة جميع البيانات كتلة واحدة .
WriteAllBytes() : كتابة byte by byte
WriteAllLines() : الكتابة على شكل اسطر .
WriteAllText() : الكتابة ككتلة واحدة .

ويمكن استخدامهم بالشكل التالي مثلاً - من كتاب ProCSharp 2008:

C#:
كود PHP:
string[] myTasks = {
"Fix bathroom sink""Call Dave",
"Call Mom and Dad""Play Xbox 360"};
// Write out all data to file on C drive.
File.WriteAllLines(@"C:\tasks.txt"myTasks);
// Read it all back and print out.
foreach (string task in File.ReadAllLines(@"C:\tasks.txt"))
{
Console.WriteLine("TODO: {0}"task);

vb.net:
كود PHP:
Dim myTasks As String() = {"Fix bathroom sink""Call Dave""Call Mom and Dad""Play Xbox 360"
' Write out all data to file on C drive. 
File.WriteAllLines("C:\tasks.txt", myTasks) 
Read it all back and print out
For 
Each task As String In File.ReadAllLines("C:\tasks.txt"
    
Console.WriteLine("TODO: {0}"task
Next 
معلومة اضافية :

*** في .net ، يمكن للفئة إذا كانت implemented ل IDisposable ان نقوم بتعريفها في مكان ومن ثم حذفها خارج هذا النطاق بالشكل التالي مثلاً :

C#:
كود PHP:
using (CarClass newCare)
{
// do operations

vb.net:
كود PHP:
Using newCare As CarClass 
' do operations
End Using 
لذا سنحاول استخدامها ايضاً مع الملفات حتى لا تبقى معلقة في الذاكرة بالشكل التالي مثلاً :

C#:
كود PHP:
FileInfo f = new FileInfo(@"C:\test.txt");
using(StreamReader reader f.OpenText())
{
// code here

vb.net:
كود PHP:
Dim f As New FileInfo("C:\test.txt"
Using reader As StreamReader f.OpenText() 
        
' code here 
End Using 
إلى هنا نكون قد انتهينا من دروس هذا اليوم ، نواصل غداً إن شاء الله مع دروس Stream .

والله الموفق ...
والسلام عليكم ورحمة الله وبركاته .


توقيع : khaledbelal



(أَفَأَمِنَ أَهْلُ الْقُرَى أَن يَأْتِيَهُمْ بَأْسُنَا بَيَاتاً وَهُمْ نَآئِمُونَ {97} أَوَ أَمِنَ أَهْلُ الْقُرَى أَن يَأْتِيَهُمْ بَأْسُنَا ضُحًى وَهُمْ يَلْعَبُونَ {98}
أَفَأَمِنُواْ مَكْرَ اللّهِ فَلاَ يَأْمَنُ مَكْرَ اللّهِ إِلاَّ الْقَوْمُ الْخَاسِرُونَ {99}).
سورة الأعراف.

رد مع اقتباس
إضافة رد


تعليمات المشاركة
لا تستطيع إضافة مواضيع جديدة
لا تستطيع الرد على المواضيع
لا تستطيع إرفاق ملفات
لا تستطيع تعديل مشاركاتك

BB code is متاحة
كود [IMG] متاحة
كود HTML معطلة

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

المواضيع المتشابهه
الموضوع كاتب الموضوع المنتدى مشاركات آخر مشاركة
الدرس الرابع والعشرون : System.Object دورة .net 2008 khaledbelal دورة .NET 2008 من منتدى فيجوال بيسك للعرب 1 03-02-2011 03:55 PM
الدرس الحادي والخمسون : System.IO - الجزء الثالث والأخير - دورة .net 2008 khaledbelal دورة .NET 2008 من منتدى فيجوال بيسك للعرب 0 03-01-2010 01:52 PM
الدرس الخمسون : System.IO - الجزء الثاني - دورة .net 2008 khaledbelal دورة .NET 2008 من منتدى فيجوال بيسك للعرب 0 03-01-2010 01:37 PM
الدرس التاسع عشر : ال Encapsulation دورة .net 2008 khaledbelal دورة .NET 2008 من منتدى فيجوال بيسك للعرب 0 02-20-2010 03:07 PM
الدرس التاسع : ال Enumeration دورة .net 2008 khaledbelal دورة .NET 2008 من منتدى فيجوال بيسك للعرب 0 02-18-2010 04:27 PM

استضافة الحياة

الساعة الآن 02:39 PM.


Powered by vBulletin® v3.8.4, Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. , TranZ By Almuhajir
النسخة الفضية
Ads Management Version 3.0.1 by Saeed Al-Atwi

SlamDesignzslamDesignzEdited by Riad Al-Ganah Team - جميع الحقوق محفوظة لشبكة رياض الجنة

Privacy Policy Valid XHTML 1.0 Transitional By SlamDesignz Valid CSS Transitional By SlamDesignz