C# والملفات: من المبتدئ إلى المحترف في التعامل مع نظام الملفات

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

لماذا مهارة التعامل مع الملفات في C# هي قوة خارقة؟

\n\n

تخيل أنك تكتب برنامجًا يجب أن يحفظ إعدادات المستخدم، أو يسجل الأخطاء، أو يعالج آلاف المستندات. بدون مهارات التعامل مع نظام الملفات، ستواجه جدارًا من الصعوبات. في C#، التعامل مع الملفات ليس مجرد قراءة مملة للأسطر. إنها فرصة لإنشاء أدوات قوية، ومحللات، وحتى قواعد بيانات مصغرة.

\n\n

في هذه المقالة، سنشرح كل شيء: من File.ReadAllText البسيط إلى التعامل المتقدم مع التدفقات والمجلدات. ستتعلم كيف لا تفقد البيانات، وكيف تحسن قراءة الملفات الكبيرة، وكيف تتجنب "المزالق" في نظام الملفات. هيا بنا!

\n\n

الفصول البطلة: File، FileInfo، Directory و Path

\n\n

في .NET، هناك طريقتان للتعامل مع الملفات: الطرق الثابتة للفئة File وطرق الكائنات للفئة FileInfo. الأولى للعمليات السريعة "اقرأ-اكتب"، والثانية عندما تحتاج للتعامل مع ملف واحد لفترة طويلة مع الحفاظ على الحالة.

\n\n

File مقابل FileInfo: متى تستخدم أيهما؟

\n\n

File هي فئة ثابتة. تكتب File.Exists("test.txt") وينتهي الأمر. مريحة، لكن في كل عملية يتحقق النظام من المسار من جديد.

\n\n

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

\n\n
// الطريقة السريعة\nif (File.Exists(@"C:\\data\\log.txt"))\n{\n    string content = File.ReadAllText(@"C:\\data\\log.txt");\n    Console.WriteLine(content);\n}\n\n// الطريقة الاحترافية\nFileInfo fileInfo = new FileInfo(@"C:\\data\\log.txt");\nif (fileInfo.Exists)\n{\n    using (StreamReader reader = fileInfo.OpenText())\n    {\n        string content = reader.ReadToEnd();\n        Console.WriteLine(content);\n    }\n}\n
\n\n

الفئة Directory تعمل بنفس المبدأ — طرق ثابتة للعمليات السريعة مع المجلدات. Path هو مساعد لا غنى عنه لدمج المسارات: Path.Combine("folder", "file.txt") يضع تلقائيًا الشرطة المائلة الصحيحة.

\n\n

قراءة الملفات: من الصغير إلى العملاق

\n\n

قراءة الملفات في C# هي فن التوازن بين البساطة والأداء. دعنا نشرح ثلاثة مستويات.

\n\n

المستوى 1: كل شيء مرة واحدة (للملفات الصغيرة)

\n\n

إذا كان حجم الملف يصل إلى 10 ميجابايت، استخدم ReadAllText أو ReadAllLines بثقة.

\n\n
string text = File.ReadAllText("config.json");\nstring[] lines = File.ReadAllLines("users.csv");\n
\n\n

العيب: مع الملفات الكبيرة، قد تواجه OutOfMemoryException.

\n\n

المستوى 2: القراءة سطرًا سطرًا (للملفات المتوسطة)

\n\n

نستخدم StreamReader — نقرأ سطرًا تلو الآخر، دون تحميل كل شيء في الذاكرة.

\n\n
using (StreamReader reader = new StreamReader("big_log.txt"))\n{\n    string line;\n    while ((line = reader.ReadLine()) != null)\n    {\n        Console.WriteLine(line); // نعالج كل سطر\n    }\n}\n
\n\n

لاحظ استخدام using — فهو يضمن إغلاق الملف حتى في حالة حدوث خطأ.

\n\n

المستوى 3: قراءة البيانات الثنائية (للمحترفين)

\n\n

التعامل مع الصور، الأرشيفات، أو أي ملفات غير نصية يتطلب FileStream.

\n\n
using (FileStream fs = new FileStream("photo.jpg", FileMode.Open, FileAccess.Read))\n{\n    byte[] buffer = new byte[1024];\n    int bytesRead;\n    while ((bytesRead = fs.Read(buffer, 0, buffer.Length)) > 0)\n    {\n        // نعالج جزء البيانات\n        Console.WriteLine($"تم قراءة {bytesRead} بايت");\n    }\n}\n
\n\n

كتابة الملفات: كيف لا تفقد البيانات

\n\n

الكتابة في C# ليست فقط File.WriteAllText. من المهم فهم الأوضاع: إنشاء ملف جديد، الإضافة إلى النهاية، أو إعادة الكتابة.

\n\n

الأوضاع الأساسية لـ FileMode

\n
    \n
  • CreateNew<

المدونات

توصيات الكتب