مشروع Smart File Manager هو تطبيق سطح مكتب Windows مبني باستخدام C# وWinUI 3 وWindows App SDK. بدل محاولة بناء مدير ملفات ضخم منذ البداية، يركز المستودع على وظيفتين عمليتين ومفهومتين بوضوح: Batch Rename وDuplicate File Finder. هذا التحديد يجعل بنية المشروع أبسط، ويجعل اختبار كل وظيفة وفهمها أسهل.
1. إعادة التسمية الجماعية يجب أن تبدأ بالمعاينة
تغيير أسماء عشرات أو مئات الملفات عملية حساسة؛ لذلك الفكرة الأساسية في جزء إعادة التسمية ليست مجرد تنفيذ النمط المطلوب، بل إظهار الاسم القديم والاسم الجديد قبل تطبيق التغيير. المشروع يدعم أفكارًا مثل إضافة prefix أو suffix، الترقيم التلقائي، واستبدال نص داخل أسماء الملفات مع الحفاظ على امتداداتها.
وجود المعاينة يفصل بين مرحلتين مهمتين: حساب النتيجة ثم تطبيق النتيجة. هذا الفصل مفيد في تطبيقات سطح المكتب لأن المستخدم يستطيع التأكد من النمط قبل إجراء أي تعديل على الملفات.
2. لماذا لا نحسب SHA-256 لكل الملفات مباشرة؟
في اكتشاف الملفات المكررة، لا يحتاج البرنامج إلى حساب hash لكل ملف من البداية. الخطوة الأولى هي تجميع الملفات حسب الحجم. الملفات ذات الأحجام المختلفة لا يمكن أن تكون متطابقة byte-for-byte، وبالتالي نستبعدها مبكرًا. بعد ذلك فقط تُحسب قيمة SHA-256 للمرشحين الذين يشتركون في الحجم.
هذه الطريقة تقلل العمل غير الضروري، خصوصًا عند فحص مجلد يحتوي على عدد كبير من الملفات المختلفة. وعند تطابق الحجم والـhash يمكن عرض الملفات ضمن مجموعات تكرار وإظهار المساحة التي تشغلها النسخ الزائدة.
3. التقنيات المستخدمة
المستودع يستخدم .NET 8 وWinUI 3 وWindows App SDK، إضافة إلى CommunityToolkit.Mvvm. البنية تفصل النماذج والخدمات والمساعدات عن ملفات الواجهة مثل MainWindow.xaml. الهدف من هذا التنظيم أن تبقى عمليات الملفات منفصلة قدر الإمكان عن منطق العرض.
4. ماذا نتعلم من المشروع؟
- العمليات الجماعية تحتاج Preview قبل التنفيذ.
- يمكن تقليل تكلفة اكتشاف التكرار باستخدام فلترة الحجم قبل hashing.
- فصل خدمات الملفات عن الواجهة يجعل الكود أسهل في القراءة والتطوير.
- الأدوات الصغيرة ذات نطاق واضح مناسبة جدًا لتجربة WinUI 3 وWindows App SDK.
5. تشغيل المشروع
المستودع يحتوي أوامر التشغيل الأساسية باستخدام dotnet restore وdotnet build وdotnet run. وإذا طلب WinUI تفعيل Developer Mode في Windows، يمكن تفعيله من إعدادات المطور.