مقدمة
\nالعمل مع نظام الملفات هو أحد المهام الأساسية عند تطوير التطبيقات لنظامي iOS وmacOS. بغض النظر عما إذا كنت تكتب تطبيقًا لحفظ بيانات المستخدم، أو تخزين الصور مؤقتًا، أو تصدير المستندات، فإن فهم أساسيات العمل مع الملفات في Swift هو مهارة ضرورية. في هذه المقالة، سنستعرض أمثلة عملية للعمل مع نظام الملفات: إنشاء الملفات وقراءتها وكتابتها وحذفها وإدارة الدلائل.
\nتوفر Apple واجهة برمجة تطبيقات قوية FileManager تتيح التفاعل مع نظام الملفات على كل من iOS وmacOS. سنستعرضها من خلال أمثلة حقيقية مع كود جاهز.
1. الحصول على مسارات الدلائل النظامية
\nقبل البدء في العمل مع الملفات، تحتاج إلى الوصول إلى الدلائل الصحيحة. في iOS وmacOS، يعمل كل تطبيق في بيئة معزولة (sandbox). لتخزين البيانات، استخدم المسارات التالية:
\n\nدليل Documents
\nيُستخدم لتخزين بيانات المستخدم التي يجب الاحتفاظ بها عند تحديثات التطبيق والنسخ الاحتياطي.
\nimport Foundation\n\nfunc getDocumentsDirectory() -> URL {\n let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)\n return paths[0]\n}\n\n// مثال على الاستخدام\nlet documentsURL = getDocumentsDirectory()\nprint("Documents path: \\(documentsURL.path)")\n\nدليل Caches
\nللملفات المؤقتة التي يمكن إعادة إنشائها (مثل ذاكرة التخزين المؤقت للصور).
\nfunc getCachesDirectory() -> URL {\n let paths = FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask)\n return paths[0]\n}\n\nدليل Library/Application Support
\nلتخزين البيانات التي لا ينبغي أن تكون متاحة للمستخدم مباشرة، ولكن يجب الاحتفاظ بها.
\nfunc getApplicationSupportDirectory() -> URL {\n let paths = FileManager.default.urls(for: .applicationSupportDirectory, in: .userDomainMask)\n let directory = paths[0]\n // تأكد من وجود الدليل\n try? FileManager.default.createDirectory(at: directory, withIntermediateDirectories: true)\n return directory\n}\n\n2. إنشاء وكتابة الملفات
\nالآن بعد أن عرفنا أين نخزن الملفات، دعنا نتعلم كيفية إنشائها وكتابة البيانات.
\n\nكتابة البيانات النصية
\nأبسط طريقة هي استخدام طريقة write(to:) مع سلسلة نصية أو Data.
func writeTextFile() {\n let fileName = "example.txt"\n let documentsURL = getDocumentsDirectory()\n let fileURL = documentsURL.appendingPathComponent(fileName)\n \n let content = "Hello, Swift! هذا ملف اختبار."\n \n do {\n try content.write(to: fileURL, atomically: true, encoding: .utf8)\n print("تم إنشاء الملف بنجاح: \\(fileURL.path)")\n } catch {\n print("خطأ في كتابة الملف: \\(error.localizedDescription)")\n }\n}\n\nكتابة البيانات الثنائية (صور، JSON)
\nللعمل مع البيانات الثنائية، نستخدم Data.
func writeJSONFile() {\n let fileName = "data.json"\n let documentsURL = getDocumentsDirectory()\n let fileURL = documentsURL.appendingPathComponent(fileName)\n \n let dictionary: [String: Any] = [\n "name": "Swift Developer",\n "age": 30,\n "skills": ["iOS", "macOS", "SwiftUI"]\n ]\n \n do {\n let jsonData = try JSONSerialization.data(withJSONObject: dictionary, options: .prettyPrinted)\n try jsonData.write(to: fileURL, options: .atomic)\n print("تم حفظ ملف JSON")\n } catch {\n print("خطأ: \\(error)")\n }\n}\n\nإنشاء الدلائل
\nفي بعض الأحيان تحتاج إلى إنشاء مجلدات متداخلة لتنظيم الملفات.
\nfunc createSubdirectories() {\n let documentsURL = getDocumentsDirectory()\n let subDirURL = documentsURL.appendingPathCo