تقييم الموضوع :
  • 4 أصوات - بمعدل 4
  • 1
  • 2
  • 3
  • 4
  • 5
Drive-Directory-File in Csharp
#1
السلام عليكم إخواني الأعزاء ورحمة الله وبركاته
لقد وجدت من خلال متابعاتي في هذا المنتدى الكريم أن هناك مشكلة في التعامل مع الفئات : Drive / Directory / File، وأحببت أن أقدم سلسلة تعليمية معتمدا الوسيلة الكتبية عوضا عن المرئية لأن البعض يعاني من بطئ النت سواء في منزله أو في أي مكان آخر.

سنبدأ أولا بالتعمل مع الفئة DriveInfo :

Drive :
نستطيع من خلال هذه الفئة التعامل مع السواقات في نظام التشغيل (Partitions) كالسواقة C:  أو السواقة D: أو أي سواقة أخرى موجودة داخل نافذة السواقات في نظام التشغيل، شاهد الصورة في الأسفل :
   

   

من الجدير ذكره أيضا، لكي نستطيع التعامل مع هذه الفئة لا بد من استدعاء مكتبة System.IO فالفئات التي سوف نتحدث عنها هي من أبناء هذه المكتبة.

   

كيف نكتب هذه الفئة في صفحة الأكواد؟
هذه الفئة ليست من النوع static، أي لا يمكن الوصول إلى وظائفها مباشرة لا بد من استنساخها من خلال متغير يمثل دورها، بمعنى آخر لا بد من إنشاء Instance لها يمكننا من التعامل مع وظائفها أو استدعائها، أنظر لعملية الإستنساخ :
PHP كود :
DriveInfo d = new DriveInfo(); 

هذه الفئة تأخذ Parameter واحد فقط وهو من نوع string، وضع البراميتر هو إلزامي وليس إختياري، إذا ما هو البراميتر المفروض أن نضعه؟
ببساطة إسم السواقة DriveName، ولأنه من نوع Sting يجب أن يوضع بين علامتي تنصيص المزدوجة. أنظر للبراميتر :

   

PHP كود :
DriveInfo d = new DriveInfo("D:"); 

   

ما هي وظائف الفئة DriveInfo?
- TotalSize : تمكننا هذه الوظيفة من معرفة الحجم الكلي للسواقة.
TotalFreeSpace : تمكننا هذه الوظيفة من معرفة المساحة الخالية أو الفارغة للسواقة.
DriveType : تمكننا هذه الوظيفة من معرفة نوع السواقة وأنواعها هي :
- Fixed : كالهارديسك الموجود داخل الجهاز.
- CD-Rom
- Network : مشاركة مساحة السواقة من خلال Map Network Drive
- Removable : كالـ Usb أو هارديسك Extrenal وغيرها.
DriveFormat : تمكننا هذه الوظيفة من معرفة نظام الملف File System هلة هو NTFS or FAT32.
Name : يظهر إسم الـ Fixed Drive كالـ C:\ and D:\ not CD-Rom Or Removable Devices.

يتبع...

الوظيفة الأولى : TotalSize :

قم بإضافة زر أمر إلى النموذج وضع الكود التالي في الحدث Click :
PHP كود :
DriveInfo d = new DriveInfo("D");
 
           long dTotal d.TotalSize;
 
           MessageBox.Show("Your Drive Size is : " dTotal); 

شرح الكود :
قمنا باستنساخ الـ DriveInfo من خلال المتغير d، ثم قمنا بالإعلان عن متغير من نوع Long، وأسندنا له قيمة وهو الكائن d الذي يمثل دور الفئة DriverInfo، واخترنا الوظيفة TotalSize لكي يقوم بإرجاع قيمة الحجم الكلي للسواقة D، وسوف يتم إظهار الناتج في رسالة.

   

أنظر إلى الصورة أعلاه وتأمل معي لقد قام بإرجاع عدد طويل وحدة قياسه byte، أنظر إلى الصورة أدناه :

   

إذا كيف يمكن التحويل من الـ Byte to Kilo Byte؟
نقسم الحجم الكلي على 1024
PHP كود :
DriveInfo d = new DriveInfo("D");
 
           long dTotal d.TotalSize;
 
           MessageBox.Show("Your Drive Size is : " dTotal 1024 " KB"); 

   

إلى MB :
PHP كود :
DriveInfo d = new DriveInfo("D");
 
           long dTotal d.TotalSize;
 
           MessageBox.Show("Your Drive Size is : " dTotal 1024 1024 " MB"); 

   

إلى GB :
PHP كود :
DriveInfo d = new DriveInfo("D");
 
           long dTotal d.TotalSize;
 
           MessageBox.Show("Your Drive Size is : " dTotal 1024 1024 1024 " GB"); 

   

يتبع...
عن مولا نا علي ابن أبي طالب عليه السلام :
أحصد الشر من صدر غيرك بقلعه من صدرك.
الرد }}}}
#2
لقد نسيت أن أضيف على فقرة الوظائف للفئة DriveInfo الوظيفة AvailableFreeSpace، ولكن ما الفرق بين الوظيفتين TotalFreeSpace و AvailableFreeSpace؟

الجواب :
TotalFreeSpace :
هذه الوظيفة تشير إلى القيمة الإجمالية من المساحة الفارغة المتوفرة على القرص أو السواقة، وليس فقط ما هو متاح للمستخدم الحالي.

AvailableFreeSpace :
هذه الوظيفة تشير إلى مقدار من المساحة الفارغة المتوفرة على القرص أو السواقة، ولاحظ أن هذه القيمة قد تكون مختلفة عن إجمالي قيمة TotalFreeSpace لأن هذه الوظيفة تأخذ بعين الاعتبار الحصص النسبية للقرص.

فعلى سبيل المثال، لنفترض أن لدينا قرص صلب بحجم 500 جيغا وقمنا بتقسيم القرص الصلب إلى قطاعين :
القطاع الأول وهو الـ C : حجمه 100 جيغا.
القطاع الثاني وهو الـ D : حجمه 400 جيغا.

ثم قمنا باقتطاع مساحة محددة من القطاع D بحجم 50 جيغا لمستخدم (أ) من خلال خدمة Quotas في نظام التشغيل، الوظيفة AvailableFreeSpace سوف تقوم بإرجاع المساحة الفارغة المتببقية من المساحة المقتطعة للمستخدم (أ)، فلنفترض أن المستخدم (أ) إستهلك 30 جيغا من المساحة المقتطعة 50 جيغا، فإن الوظيفة AvailableFreeSpace سوف ترجع المساحة الفارغة بقيمة 20 جيغا.

أما الوظيفة TotalFreeSpace فسوف تعيد كامل المساحة دون أن تؤثر عليها الصلاحيات أو الحدود على المستخدم.

أتمنى أن أكون قد وفقت في إيصال الفكرة.

يتبع...

الوظيفة TotalFreeSpace :
PHP كود :
DriveInfo d = new DriveInfo("D");
 
           long dTotal d.TotalFreeSpace;
 
           MessageBox.Show("[Total Free Space is : " dTotal 1024 1024 1024 " GB"); 

   
عن مولا نا علي ابن أبي طالب عليه السلام :
أحصد الشر من صدر غيرك بقلعه من صدرك.
الرد }}}}
#3
الوظيفة DriveType :
PHP كود :
DriveInfo[] allDrives DriveInfo.GetDrives();
 
           foreach (DriveInfo d in allDrives)
 
           {
 
               listBox1.Items.Add(d.DriveType);
 
           

النتيجة :
   

   

يتبع...
عن مولا نا علي ابن أبي طالب عليه السلام :
أحصد الشر من صدر غيرك بقلعه من صدرك.
الرد }}}}
#4
الوظيفة DriveType :
في الأمثلة التي أسلفنا ذكرها أعلاه كنا قد تطرقنا إلى طريقة الإستعلام عن Drive واحد فقط ، كالإستعلام مثلا عن الحجم الكلي والمساحة الحرة لـ Drive واحد فقط، أما في هذه الوظيفة فإننا سوف نتعامل مع أكثر من Drive، لذا لكي نتمكن من التعامل مع أكثر من Drive لا بد من تخزين هذه الـ Drives في مصفوفة We should store drives in array، ثم نقوم بالدوران على كل Drive واستدعاء نوعه من خلال جملة التكرار ForEach. وهنا سوف تستخدم الدالة GetDrives، أنظر إلأى الكود :

PHP كود :
DriveInfo[] allDrives DriveInfo.GetDrives();
 
           foreach (DriveInfo d in allDrives)
 
           {
 
               listBox1.Items.Add(d.DriveType);
 
           

   

لاحظ الصورة أدناه، الدالة GetDrives مهمتها إرجاع الوحدات المنطقية، وهي دالة موجودة في الـ Class DriveInfo :

   

لو قمنا بوضع الماوس على الدالة GetDrives ثم قمنا بالنقر على يمين الفأرة سوف تظهر القائمة في الصورة أدناه :

   

قم باختيار Go to Defintion من القائمة وسوف تظهر الصفحة التاية في الصورة أدناه :

   

ماذا نرى في الصورة، نرى الـ Class DriveInfo يحتوي على مجموعة من الدوال منها GetDrives، أنظر إلى بعملية Expand  لهذه الدالة ما الذي سيظهر، أنظر إلأى الصورة أدناه :

   

أعتقد أن الفكرة أصبحت واضحة تماما.

النتيجة :
عن مولا نا علي ابن أبي طالب عليه السلام :
أحصد الشر من صدر غيرك بقلعه من صدرك.
الرد }}}}
#5
السلام عليكم إخواني الأعزاء ورحمة الله وبركاته
أعود إليكم من جديد لنستكمل معا موضوع التعامل مع الفئة DriveInfo.

الوظيفة DriveFormat :
كنا قد أسلفنا الذكر أن هذه الوظيفة تقوم بالإستعلام عن نظام الملف للقطاع فهو إما أن يكون نوع NTFS أو FAT32، وسوف يتم صياغة الكود بنفس الطريقة التي استخدمناها مع الوظائف التي تستعلم عن أكثر من Drive :
PHP كود :
DriveInfo[] allDrives DriveInfo.GetDrives();
 
           foreach (DriveInfo d in allDrives)
 
           {
 
               listBox1.Items.Add(d.DriveFormat);
 
           

ولكن ما الذي سيجري عند تنفيذ الكود سوف تظهر المشكلة التالية :

   

ما المقصود من هذا الـ Exception؟
الجهاز غير جاهز، ويعني أن الجهاز قد يكون في وضعية القراءة أو الكتابة سواء كان قرص صلب أو قرص مرن، ولكن لكي نتفادى هذه المشكلة هناك طريقتان :
الطريقة الأولى : أن نستعمل جملة Try Catch
الطريقة الثانية : أن نتحقق من جاهزية الجهاز (القرص الصلب وغيره...) هل هو جاهز أم لا، ثم بعد ذلك يستعلم عن الـ Format للـ Drive:
PHP كود :
DriveInfo[] allDrives DriveInfo.GetDrives();
 
           foreach (DriveInfo d in allDrives)
 
           {
 
               if (d.IsReady==true)
 
               {
 
                   listBox1.Items.Add(d.DriveFormat);
 
               }
 
           
فإذا كانت نتيجة الجاهزية للـ Drive تساوي True فهذل يعني أن الـ Drive جاهز، والعكس صحيح، فإذا وضعنا الماوس على الوظيفة IsReady ثم نقرنا على يمين الفأرة واخترنا من القائمة Go To Definition، شاهد الصورة أدناه :

   

النتيجة :

   

يتبع ...
عن مولا نا علي ابن أبي طالب عليه السلام :
أحصد الشر من صدر غيرك بقلعه من صدرك.
الرد }}}}
تم الشكر بواسطة: Sajad , الوادي , Amir_alzubidy , ابو ليلى
#6
دعونا نتعامل مع الفئة DriveInfo من خلال  تقنية Linq:

لو أردنا مثلا الإستعلام عن نوع الـ Drive :
الطريقة الأولى :
PHP كود :
DriveInfo[] allDrives DriveInfo.GetDrives();

 
           var myDrives from x in allDrives select x;

 
           foreach (DriveInfo d in myDrives)
 
           {
 
               listBox1.Items.Add(d.DriveType);
 
           

   

الطريقة الثانية Lambda Expression :
{
           DriveInfo[] allDrives = DriveInfo.GetDrives();

           var myDrives = (from x in allDrives select x).ToList();

           myDrives.ForEach(c=> {
               listBox1.Items.Add(c.DriveType);
           });

   

PHP كود :
{
 
           DriveInfo[] allDrives DriveInfo.GetDrives();

 
           List<DriveInfomyDrives allDrives.Select(c=> c).ToList();

 
           myDrives.ForEach(c=> {
 
               listBox1.Items.Add(c.DriveType);
 
           }); 


   

نسأل الله عز وجل أن نكون قد وفقنا في إيصال الفكرة حول الفئة DriveInfo على أمل ننتقل إلى الفئة الثانية وهي File and FileInfo في المشاركات القادمة.
أتمنى لكم التوفيق
عن مولا نا علي ابن أبي طالب عليه السلام :
أحصد الشر من صدر غيرك بقلعه من صدرك.
الرد }}}}
#7
بسم الله الرحمن الرحيم
السلام عليكم إخواني الأعزاء ورحمة الله وبركاته
لقد انتهينا بحمد لله من شرح الفئة DriveInfo (التعامل مع الوحدات في نظام التشغيل) المنتبية لمجال الأسماء System.IO وIO هيا اختصار لكلمتي Input and OutPut، وأعتقد أننا شرحنا هذه الفئة بالتفصيل نوعا ما.
في هذه المشاركة سوف ننتقل لشرح الفئتين Directory and DirectoryInfo للتعامل أو الإٍستعلام عن المجلدات، والفرق Directory and DirectoryInfo i :

الفئة Directory :
تحتوي هذه الفئة على وظائف من نوع Static أي يمكن الوصول إليها مباشرة.

مثال :

PHP كود :
foreach (string dr in Directory.GetFiles("D:\\Codes"))
            {
                
listBox1.Items.Add(dr);
            } 

الفئة DirectoryInfo :
تحتوي هذه الفئة على وظائف لا يمكن الوصول إليها مباشرة إلا من خلال إستنساخ كائن منها.

مثال :

PHP كود :
DirectoryInfo allDirectory = new DirectoryInfo("D:\\Codes");
            foreach (
FileInfo dr in allDirectory.GetFiles())
            {
                
listBox1.Items.Add(f);
            } 

الفئة Directory :

تمكننا هذه الفئة من الولوج إلى عالم المجلدات للإستعلام عنها أي جمع كافة المعلومات المتعلقة بهذه المجلدات، وليس فقط الإٍستعلام فيمكننا من خلال هذه الفئة أيضا إجراء
عمليات تنفيذية كإنشاء مجلد جديد والحذف ونقل المجلد من مسار إلى مسار آخر.

وظائف الفئة Directory :
CreateDirectories : تمكننا هذه الوظيفة من إنشاء مجلد جديد وفقا لمسار محدد.

Delete : تمكننا هذه الوظيفة من حذف مجلد وفقا لمسار محدد.

Exist : هذه الوظيفة تمكننا من التأكد من وجود الملف وفقا لمسار محدد.

GetDirectory : هذه الوظيفة تمكننا من الوصول إلى المجلدات داخل المجلد ضمن مسار محدد.

GetFiles : هذه الوظيفة تمكننا من الوصول إلى الملفات داخل المجلد ضمن مسار محدد.

Move : هذه الوظيفة تمكننا من نقل المجلد من مسار إلى مسار آخر.

EnumerateDirectories : تمكننا هذه الوظيفة من الوصول إلى المجلدات ضمن مسار محدد، وسوف نتحدث عنها بالتفصيل وعن الفرق بينها والوظيفة GetDirectories.

EnumerateFiles : تمكننا هذه الوظيفة من الوصول إلأى الملفات داخل المجلد ضمن مسار محدد، وسوف نتحدث عنا بالتفصيل وعن الفرق بينها والوظيفة GetFiles.

GetFileSystemEntries : تمكننا هذه الوظيفة من الوصول إلى المجلدات أو الملفات ضمن شروط ومعايير محددة وفقا لمسار محدد.

EnumerateFileSystemEntries : أيضا هذه الوظيفة من الوصول إلى المجلدات أو الملفات ضمن شروط ومعايير محددة وفقا لمسار محدد، وسوف نتحدث عنها بالتفصيل وعن الفرق بينها والوظيفة GetFileSystemEntries.

سنكتفي بهذا المقدار من الوظائف، هناك الكثير منها سوف نتناولها فيما بعد.
سوف نقوم بشرح وتشريح كل وظيفة على حدى في المشاركات المقبلة إن شاء الله.
يتبع ...
عن مولا نا علي ابن أبي طالب عليه السلام :
أحصد الشر من صدر غيرك بقلعه من صدرك.
الرد }}}}
تم الشكر بواسطة: الوادي , Sajad , ابو ليلى
#8
إسمحوا لي أن أبدأ أولا بالوظائف التي تتسم بالطابع التنفيذي.
الوظيفة CreateDirectory : إنشاء مجلد.

PHP كود :
Directory.CreateDirectory("D:\\TestFolder"); 

شرح الكود :
لقد قمنا بوضع إسم الفئة Directory ثم استدعينا منها الوظيفة CreateDirectory، والوظيفة CreateDirectory تتضمن Parameter واحد فقد وهو المسار، وهو من نوع String، ولأنه من نوع String يجب أن يوضع بين علامتي تنصيص مزدوجة، أنظر إلى الصورة أدناه :

   

إذا لو أضفنا زر أمر إلى النموذج ووضعنا في الحدث Click لهذا الزر هذا الكود فسوف يقوم بإنشاء مجلد جديد في المسار D: بعنوان TestFolder.

قلت في بداية الشرح أن الوظائف الموجودة في الفئة Directory هي من نوع Static، طيب قم بوضع الماوس على الدالة أو الوظيفة CreateDirecory ثم إضغط بيمين الفأرة فتظهر قائمة قم باختيار GoTo Defintion وستظهر عندك صفحة الفئة Directory تضم مجموعة من الدوال والوظائف، شاهد الصورة أدناه :

   

الوظيفة Delete : حذف مجلد
PHP كود :
Directory.Delete("D:\\TestFolder"); 

شرح الكود :
لقد قمنا بوضع إسم الفئة Directory ثم استدعينا منها الوظيفة Delete، والوظيفة Delete تتضمن Parameter واحد فقد وهو المسار، وهو من نوع String، ولأنه من نوع String يجب أن يوضع بين علامتي تنصيص مزدوجة، أنظر إلى الصورة أدناه :

   

الوظيفة Move : نقل المجلد.
نستفيد من هذه الوظيفة بنقل المجلد من مسار إلى مسار، فلنفترض مثلا أن لدينا مجلد بعنوان TestFolder ونريد نقله من المسار D:\MainFolder\TestFolder   إلى المسار D:  فسوف تقوم هذه الوظيفة بدورها بنقل المجلد كليا إلى المسار D: دون أن يبقى له أثر في المسار D:\MainFolder\TestFolder ، وكأننا نقوم بعملية نسخ للمجلد ثم حذفه من مكانه الأصلي.

PHP كود :
Directory.Move("D:\\MainFolder\\TestFolder""D:\\TestFolder"); 

شرح الكود :
لاحظ هنا الدالة أو الوظيفة Move تأخد براميتر عدد 2، البراميتر الأول يمثل دور مصدر المجلد الأساسي، والبراميتر الثاني يمثا الموقع الذي سينتقل إليه. وفي هذا الكود سوف نقوم بنقل المجلد TestFolder الموجود داخل المجلد MainFolder إلى الموقع D:.

   

المشاكل التي يمكن أن تواجهنا عند استخدام هذه الوظيفة :

المشكلة الأولى :    
لنفترض مثلا أن لدينا مجلد بعنوان TestFolder موجود في المسار D: ، وقمنا بصياغة الكود على هذا النحو :
PHP كود :
Directory.Move("D:\\TestFolder""D:\\TestFolder"); 

سوف تظهر المشكلة التالية :
 
   

ومفادها، أنه لا يمكن نقل المجلد في نفس المسار وهو يحمل نفس الإسم، يجب تغيير إسم المجلد في البراميتر الثاني الذي يمثل دور الموقع الذس سينتقل إليه.

الطريقة الصحيحة :
PHP كود :
Directory.Move("D:\\TestFolder""D:\\TestFolderCopy"); 

المشكلة الثانية : لا يمكن نقل الملف من وحدة إلى وحدة أخرى
ومفادها، أنه لا يمكن نقل الملف من الوحدة C: إلى الوحدة D:، فالوظيفة Move هي غير مخولة لتنفيذ ذلك، هي فقط يمكنها نقل المجلدات ضمن نفس الوحدة، شاهد معي هذا الخطأ :
PHP كود :
Directory.Move("C:\\TestFolder""D:\\TestFolder"); 

   

يتبع ...
عن مولا نا علي ابن أبي طالب عليه السلام :
أحصد الشر من صدر غيرك بقلعه من صدرك.
الرد }}}}
تم الشكر بواسطة: الوادي , Sajad , ابو ليلى
#9
بسم الله الرحمن الرحيم
السلام عليكم إخواني الأعزاء ورحمة الله وبركاته
أعود إليكم من جديد لنستكمل رحلة البحث والإستكشاف حول الفئة Directory، وقلنا سابقا أن هذه الفئة تتضمن وظائف Static بحيث يمكننا الوصول إليها بشكل مباشر دون الحاجة إللى استنساخ الفئة والوصول إلى تلك الوظائف من خلال الكائن المنتدب من الفئة.
وهذه الوظائف نوعان : منها ما هو تنفيذي (يحث تغيير أو تعديل)، ومنها ما هو إستعلامي.
في هذه المشاركة إن شاء الله سوف تنطرق إلى الجانب الآخرمن الفئة Directory وهو الوظائف الإستعلامية.

الوظيفة GetDirectory :
هذه الوظيفة تعنى بعملية الإستعلام عن المجلدات الفرعية الموجودة ضمن مجلد له مسار محدد في نظام التشغيل، ترجع لنا Array، وهذا يعني أن هذه الوظيفة ترجع مجموعة قيم أو أكثر من قيمة، فهذه المصفوفة قد تحتوي على قيمة واحدة أو أكثر، ولكي نستطيع إستخراج القيم كلها من المصفوفة لا بد من استخدام جملة التكرار والتي سوف تنفذ عملية دوران على كل قيمة في هذه المصفوفة وتعيدها إلينا، ويمكن إظهار هذه القيم المخزنة في المصفوفة في ListBox أو ComboBox أو ListView ... للمستخدم النهائي (End User).

الطريقة الأولى :
قم بإنشاء مجلد في المسار D: بعنوان TestFolder وهذا المجلد يتضمن مجموعة من المجلدات الفرعية والملفات تمتاز بامتدادات وصيغ مختلفة، أنظر الصورة أدناه :

   

كما قمت بإدراج زر أمر وListBox لإظهار النتيجة بداخلها.

الكود :
PHP كود :
foreach (string dir in Directory.GetDirectories("D:\\TestFolder"))
 
           {
 
               listBox1.Items.Add(dir);
 
           

الطريقة الثانية :
PHP كود :
string[] dirs Directory.GetDirectories("D:\\TestFolder");
 
           foreach (string dir in dirs)
 
           {
 
               listBox1.Items.Add(dir);
 
           

   

لاحظ في الصورة أعلاه، أن الوظيفة GetDirectories ترجع مصفوفة من نوع String، وتأخذا Parameter واحد فقط من نوع String وهو مسار المجلد المراد التعامل معه.

النتيجة :

   

سوف يطهر في القائمة فقط المجلدات لأننا استخدمنا الوظيفة Directory وهمتها إسترجاع المجلدات الفرعية SubDirectories الموجودة في المجلد.

الوظيفة GetFiles :
هذه الوظيفة تؤدي نفس عمل الوظيفة GetDirectories، فهي متشابهة من حيث التركيب ولكنها تؤدي إلأى نتائج مختلفة، فالوظيفة GetDirectories تستعلم عن المجلدات، أما الوظيفة GetFiles فمهمتها الإستعلام عن الملفات Files.

الطريقة الأولى :
PHP كود :
foreach (string file in Directory.GetFiles("D:\\TestFolder"))
 
           {
 
               listBox1.Items.Add(file);
 
           

الطريقة الثانية :
PHP كود :
string[] files Directory.GetFiles("D:\\TestFolder");
 
           foreach (string file in files)
 
           {
 
               listBox1.Items.Add(file);
 
           

   

النتيجة :

   

لقد تم استراجاع الملفات فقط دون المجلدات لأن هذه الوظيفة مهمتها التعامل مع الملفات.

جميل، دعونا نعقد أو نصعب الأمور نوعا ما، قلنا أن الوظيفة GetDirectories مهمتها التعامل مع المجلدات، والوظيفة GetFiles مهمتها التعامل مع الملفات، فكيف السبيل إلى إظهار المجلدات الفرعية والملفات معا في نفس المجلد؟
ببساطة تامة سوف نقوم بوضع الوظيفتين معا في نفس الحدث Click لزر الأمر، وسنضيف كل واحدة من هذه الوظائف إلى ListBox، تابع :
PHP كود :
//Get SubDirectories in directory
 
           foreach (string dir in Directory.GetDirectories("D:\\TestFolder"))
 
           {
 
               listBox1.Items.Add(dir);
 
           }

 
           //Get Files in directory
 
           foreach (string file in Directory.GetFiles("D:\\TestFolder"))
 
           {
 
               listBox1.Items.Add(file);
 
           

النتيجة :
   

أعتقد أن الصورة هي أفضل تعبير.


الملفات المرفقة صورة/صور
   
عن مولا نا علي ابن أبي طالب عليه السلام :
أحصد الشر من صدر غيرك بقلعه من صدرك.
الرد }}}}
تم الشكر بواسطة: الوادي , Sajad , ابو ليلى
#10
الوظيفة EnumerateDirectories :
لا بد أن أشير إخواني الأعزاء أن كل Methods التي تستحضر لنا المجلدات والملفات كالـ GetDirectories / GetFiles / EnumerateDirectories / EnumerateFiles تتضمن ثلاث براميترات واحدة منهم إلزامية وهي String Path والباقي إختياري مثل Search Pattern  و Search Option، وسوف نتحدث عن هذه الـ Arguments قريبا.

لنعود إلى الوظيفة EnumerateDirectories، تمكننا هذه الوظيفة من الإستعلام عن المجلدات بحيث ترجع Enumerable Collection of Strings، ولكن ما الفرق بينها وبين الوظيفة GetDirectories؟
باختصار مفيد دون الولوج إلى التفاصيل فنتوه عن المقصد، ما يميز الوظيفة EnumerateDirectories عن GetDirectories، هو حجم المجلدات والملفات التى نتعامل معها، فإذا كنا نتعامل مع مجلد بداخله آلاف المجلدات والملفات فإن الوظيفة EnumerateDirectories تتمتع بالكفاءة والسرعة لجلب ذلك الحجم الكبير من المجلدات  والملفات في حين الوظيفة GetDirectories هي أقل كفاءة في التعامل مع هكذا حجم، لماذا؟
أًصلا ماذا يعني مصطلح Enumerate، العد أو التعداد، تقوم هذه بتعداد القيم الموجودة في الـ Collection.
لنعود إلى السؤال لماذ؟
لأن الوظيفة EnumerateDirectories تبدأ بتعداد أو إحصاء القيم الموجودة في الـ Collection قبل إرجاع الـ Collection  بأكمله، في حين الوظيفة GetDirectories عليها انتظار إرجاع الـ Collection بكامله قبل أن تتمكن من الوصول إلى الـ Collection.

الكود :
PHP كود :
List<stringdirs = new List<string>(Directory.EnumerateDirectories("D:\\TestFolder"));

 
           foreach (string dir in dirs)
 
           {
 
               listBox1.Items.Add(dir);
 
           

النتيجة :

   

الوظيفة EnumerateFiles :
أيضا هذه الوظيفة تعمل نفس عمل الوظيفة GetFiles وعي تمتاز أيضا بنفس الموصافات التي تحدثنا عنها أعلاه فيما يخص الوظيفة EnumerateDirectories.
الكود :
PHP كود :
List<stringfiles = new List<string>(Directory.EnumerateFiles("D:\\TestFolder"));

 
           foreach (string file in files)
 
           {
 
               listBox1.Items.Add(file);
 
           

النتيجة :

   

لاحظ لقد أعادت لنا الملفات فقط.

يتبع ...

في هذه المشاركة سوف أتطرق إلى Argument الثاني وهو Search Pattern في الـ Methods أو الوظائف، ويمكن الإستفادة من هذا الـ Argument في الإستعلام عن المجلدات والملفات بناء لشرط أو معيار (Criteria)، وهذا الـ Argument موجود في الوظائف التالية :
- GetDirectories
- GetFiles
- EnumerateDirectories
- EnumerateFiles

الوظيفة الأولى GetDirectories :

الكود :
PHP كود :
string[] dirs Directory.GetDirectories("D:\\TestFolder","3");

 
           foreach (string dir in dirs)
 
           {
 
               listBox1.Items.Add(dir);
 
           

[attachment=11114]

في هذا المثال سوف نستعلم عن المجلدات بناء لشرط معين وقد حددت في هذا المثال أن يستدعي المجلد الذي يحمل الإسم رقم 3 في المجلد TestFolder.

النتيجة :

   

   

الوظيفة الثانية GetFiles :
في هذا المثال سوف نستعلم عن الملفات بناء لشرط أو معيار محدد، وسوف يكون الشرط هو امتداد الملف exe / txt/ bat ...

الكود :
PHP كود :
string[] files Directory.GetFiles("D:\\TestFolder","*.bat");

 
           foreach (string file in files)
 
           {
 
               listBox1.Items.Add(file);
 
           

النتيجة :

   

   

ويمكن تطبيق نفس الطريقة على الوظيفتين EnumerateDirectories و EnumerateFiles.


يتبع.....
عن مولا نا علي ابن أبي طالب عليه السلام :
أحصد الشر من صدر غيرك بقلعه من صدرك.
الرد }}}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  دورة CSharp khodor1985 5 215 30-09-16, 12:39 AM
آخر رد: bidaya

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


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