التعامل مع الملفات في لغة C# (Files in C#)

يُعدّ التعامل مع الملفات جزءًا أساسيًا من أي لغة برمجة، ولغة C# توفر أدوات قوية للقيام بذلك. تسمح لك هذه الأدوات بقراءة البيانات من الملفات وكتابتها وتعديلها وحذفها، بالإضافة إلى إدارة مسارات الملفات والمجلدات.

مساحة الاسم System.IO:

الأساس في التعامل مع الملفات في C# يكمن في مساحة الاسم System.IO. تحتوي هذه المساحة على الأصناف والواجهات الضرورية لإجراء عمليات الإدخال والإخراج (I/O) مع الملفات والمجلدات.

أهم الأصناف في System.IO:

  • File: يوفر هذا الصنف أساليبًا ثابتة (Static methods) للعمل مع الملفات، مثل إنشاء الملفات ونسخها وحذفها ونقلها وفتحها وقراءة محتوياتها وكتابتها.
  • FileInfo: يمثل هذا الصنف ملفًا فعليًا على القرص، ويوفر خصائص وأساليب للوصول إلى معلومات حول الملف، مثل اسمه وحجمه وتاريخ إنشائه وتاريخ تعديله.
  • Directory: يوفر هذا الصنف أساليبًا ثابتة للعمل مع المجلدات، مثل إنشاء المجلدات وحذفها ونقلها والبحث عن الملفات والمجلدات داخلها.
  • DirectoryInfo: يمثل هذا الصنف مجلدًا فعليًا على القرص، ويوفر خصائص وأساليب للوصول إلى معلومات حول المجلد.
  • Path: يوفر هذا الصنف أساليبًا للعمل مع مسارات الملفات والمجلدات، مثل الحصول على اسم الملف من مساره أو الحصول على مسار المجلد الأصل.
  • Stream: يُستخدم هذا الصنف للتعامل مع تدفق البيانات (Data streams)، وهو أساس عمليات القراءة والكتابة من وإلى الملفات. هناك أنواع مختلفة من التدفقات، مثل FileStream للتعامل مع الملفات، و MemoryStream للتعامل مع البيانات في الذاكرة.
  • StreamReader: يُستخدم هذا الصنف لقراءة البيانات من الملفات بشكل نصي.
  • StreamWriter: يُستخدم هذا الصنف لكتابة البيانات إلى الملفات بشكل نصي.

أمثلة على استخدام الأصناف:

  • إنشاء ملف وكتابة نص فيه:
C#
string filePath = "path/to/your/file.txt";
string content = "This is the content of the file.";

File.WriteAllText(filePath, content);
  • قراءة محتويات ملف:
C#
string filePath = "path/to/your/file.txt";
string fileContent = File.ReadAllText(filePath);

Console.WriteLine(fileContent);
  • التحقق من وجود ملف:
C#
string filePath = "path/to/your/file.txt";

if (File.Exists(filePath))
{
Console.WriteLine("File exists.");
}
else
{
Console.WriteLine("File does not exist.");
}
  • الحصول على معلومات عن ملف باستخدام FileInfo:
C#
string filePath = "path/to/your/file.txt";
FileInfo fileInfo = new FileInfo(filePath);

Console.WriteLine("File name: " + fileInfo.Name);
Console.WriteLine("File size: " + fileInfo.Length + " bytes");
Console.WriteLine("Creation time: " + fileInfo.CreationTime);

التعامل مع الاستثناءات (Exceptions):

من المهم التعامل مع الاستثناءات التي قد تحدث عند التعامل مع الملفات، مثل FileNotFoundException إذا لم يتم العثور على الملف، أو IOException إذا حدث خطأ في عملية القراءة أو الكتابة. يُمكن استخدام كتل try-catch للقيام بذلك:

C#
try
{
string fileContent = File.ReadAllText(filePath);
Console.WriteLine(fileContent);
}
catch (FileNotFoundException ex)
{
Console.WriteLine("File not found: " + ex.Message);
}
catch (IOException ex)
{
Console.WriteLine("An error occurred: " + ex.Message);
}

ملاحظات مهمة:

  • يجب التأكد من وجود صلاحيات مناسبة للوصول إلى الملفات والمجلدات.
  • يجب إغلاق التدفقات (Streams) بعد الانتهاء من استخدامها لتحرير الموارد. يُمكن استخدام عبارة using لضمان إغلاق التدفق بشكل تلقائي:
C#
using (StreamReader reader = new StreamReader(filePath))
{
string line;
while ((line = reader.ReadLine()) != null)
{
Console.WriteLine(line);
}
}