مقدمة: لماذا نحتاج العمل مع نظام الملفات في C#
\nأي تطبيق جاد يواجه عاجلاً أم آجلاً الحاجة إلى حفظ البيانات. سواء كانت ملفات إعدادات، سجلات، مستندات مستخدم أو بيانات مؤقتة - فإن العمل مع نظام الملفات هو مهارة أساسية لمطور C#. في هذه المقالة، سنستعرض من خلال أمثلة عملية كيفية إنشاء وقراءة وكتابة وإدارة الملفات والمجلدات باستخدام .NET. ستتعلم ليس فقط العمليات الأساسية، ولكن أيضًا أفضل الممارسات لمعالجة الاستثناءات والعمل مع التيّارات.
\n\nالفئات الرئيسية للعمل مع نظام الملفات
\nفي .NET، يتم استخدام مساحات الأسماء System.IO و System.IO.Enumeration للتفاعل مع نظام الملفات. الفئات الرئيسية التي ستحتاجها:
- \n
File- طرق ثابتة لإنشاء ونسخ وحذف ونقل الملفات. \n FileInfo- فئة مثيل للعمل مع ملف معين (تدعم نفس العمليات ولكنها تتطلب إنشاء كائن). \n Directory- طرق ثابتة للعمل مع الدلائل. \n DirectoryInfo- فئة مثيل للعمل مع الدلائل. \n Path- فئة أدوات للعمل مع المسارات (الدمج، الحصول على الامتداد، الاسم، إلخ). \n FileStream- تيار منخفض المستوى لقراءة/كتابة البايتات. \n StreamReader/StreamWriter- أغلفة عالية المستوى للعمل مع النصوص. \n
يعتمد الاختيار بين الطرق الثابتة وفئات المثيلات على السيناريو. إذا كنت بحاجة إلى تنفيذ عملية واحدة - استخدم File أو Directory. إذا كنت تخطط لعدة عمليات على كائن واحد - قم بإنشاء FileInfo أو DirectoryInfo.
إنشاء وقراءة وكتابة الملفات
\n\n1. إنشاء وكتابة ملف نصي
\nأسهل طريقة لكتابة نص إلى ملف هي استخدام طريقة File.WriteAllText. تقوم بإنشاء الملف (أو إعادة كتابة الملف الموجود) وتغلق التيار تلقائيًا.
using System.IO;\n\nstring path = @"C:\\temp\\example.txt";\nstring content = "مرحبًا بالعالم! هذا ملف اختبار.";\n\nFile.WriteAllText(path, content);\nConsole.WriteLine("تم إنشاء الملف وكتابته.");\nإذا كنت بحاجة إلى إضافة بيانات إلى نهاية الملف، استخدم File.AppendAllText:
File.AppendAllText(path, "\\nسطر مضاف.");\n\n2. قراءة الملف
\nلقراءة النص بالكامل استخدم File.ReadAllText:
string readContent = File.ReadAllText(path);\nConsole.WriteLine(readContent);\nإذا كان الملف كبيرًا، فمن الأفضل القراءة سطرًا بسطر عبر File.ReadLines (يعيد IEnumerable<string>):
foreach (string line in File.ReadLines(path))\n{\n Console.WriteLine(line);\n}\n\n3. العمل مع الملفات الثنائية
\nللبيانات الثنائية (الصور، الأرشيفات) استخدم FileStream أو BinaryReader/BinaryWriter. مثال على كتابة مصفوفة بايتات:
byte[] data = { 0x48, 0x65, 0x6C, 0x6C, 0x6F }; // "Hello"\nFile.WriteAllBytes(@"C:\\temp\\binary.dat", data);\n\nbyte[] readData = File.ReadAllBytes(@"C:\\temp\\binary.dat");\nConsole.WriteLine(BitConverter.ToString(readData)); // 48-65-6C-6C-6F\n\nالعمل مع المجلدات وإدارة الملفات
\n\n1. إنشاء وحذف المجلدات
\nيمكن إنشاء مجلد باستخدام Directory.CreateDirectory. تقوم الطريقة بإنشاء جميع المجلدات المفقودة في المسار:
string dirPath = @"C:\\temp\\MyApp\\Logs";\nDirectory.CreateDirectory(dirPath);\nConsole.WriteLine("تم إنشاء المجلد.");\nحذف مجلد (بشكل متكرر، مع جميع المحتويات):
\nif (Directory.Exists(dirPath))\n{\n Directory.Delete(dirPat