العمل مع نظام الملفات في Swift: دليل شامل
إدارة الملفات والدلائل هي إحدى المهام الأساسية عند تطوير التطبيقات لنظامي iOS وmacOS. في Swift، الأداة الرئيسية للعمل مع نظام الملفات هي الكلاس FileManager. في هذه المقالة، سنشرح كيفية إنشاء الملفات وقراءتها وكتابتها ونقلها وحذفها، بالإضافة إلى كيفية إدارة الدلائل بكفاءة. جميع أمثلة الكود مكتوبة بلغة Swift ومناسبة للمشاريع على iOS وmacOS.
أساسيات FileManager
FileManager هو نمط مفرد (singleton) يوفر واجهة للتفاعل مع نظام الملفات. لاستخدامه، يكفي الحصول على مثيل:
let fileManager = FileManager.defaultيسمح الكلاس بتنفيذ أي عملية تقريبًا: التحقق من وجود الملفات، الحصول على السمات، إنشاء المجلدات، وغيرها الكثير. من المهم تذكر أن جميع عمليات العمل مع نظام الملفات قد ترمي أخطاء، لذلك سنستخدم بنية do-catch.
العمل مع الدلائل
قبل إنشاء الملفات، يجب تعلم كيفية إدارة المجلدات. دعنا نستعرض العمليات الأساسية مع الدلائل.
التحقق من وجود الدليل
let documentsPath = fileManager.urls(for: .documentDirectory, in: .userDomainMask).first!let newFolderPath = documentsPath.appendingPathComponent("MyFolder")
if fileManager.fileExists(atPath: newFolderPath.path) { print("الدليل موجود")} else { print("الدليل غير موجود")}إنشاء الدليل
do { try fileManager.createDirectory(at: newFolderPath, withIntermediateDirectories: true, attributes: nil) print("تم إنشاء الدليل")} catch { print("خطأ في إنشاء الدليل: \\(error.localizedDescription)")}المعامل withIntermediateDirectories يسمح بإنشاء جميع المجلدات المفقودة في المسار تلقائيًا. على سبيل المثال، إذا أردت إنشاء Folder1/Folder2/Folder3، وكان Folder1 غير موجود - سيتم إنشاؤه تلقائيًا.
الحصول على قائمة محتويات الدليل
do { let contents = try fileManager.contentsOfDirectory(at: documentsPath, includingPropertiesForKeys: nil) for item in contents { print("تم العثور على عنصر: \\(item.lastPathComponent)") }} catch { print("خطأ في قراءة الدليل: \\(error)")}قراءة وكتابة الملفات
في Swift، توجد عدة طرق لكتابة وقراءة البيانات. دعنا نستعرض أهمها.
كتابة ملف نصي
let text = "مرحبًا بالعالم! هذا ملف اختباري."let filePath = documentsPath.appendingPathComponent("test.txt")
do { try text.write(to: filePath, atomically: true, encoding: .utf8) print("تم كتابة الملف بنجاح")} catch { print("خطأ في الكتابة: \\(error)")}قراءة ملف نصي
do { let savedText = try String(contentsOf: filePath, encoding: .utf8) print("محتوى الملف: \\(savedText)")} catch { print("خطأ في القراءة: \\(error)")}العمل مع البيانات الثنائية
// كتابةlet data = "Binary data example".data(using: .utf8)!let binaryPath = documentsPath.appendingPathComponent("data.bin")
do { try data.write(to: binaryPath, options: .atomic) print("تم كتابة البيانات الثنائية")} catch { print("خطأ في كتابة البيانات: \\(error)")}
// قراءةdo { let loadedData = try Data(contentsOf: binaryPath) print("تم قراءة \\(loadedData.count) بايت")} catch { print("خطأ في قراءة البيانات: \\(error)")}نقل ونسخ وحذف الملفات
إدارة الملفات لا تشمل الإنشاء فقط، بل أيضًا الن