منتديات نور الهدى

هل تريد التفاعل مع هذه المساهمة؟ كل ما عليك هو إنشاء حساب جديد ببضع خطوات أو تسجيل الدخول للمتابعة.

    c# io

    cs_senior
    cs_senior
    مشرف منتدى السى شارب
    مشرف منتدى السى شارب


    ذكر
    عدد الرسائل : 408
    نقاط : 80
    تاريخ التسجيل : 28/04/2008

    c# io Empty c# io

    مُساهمة من طرف cs_senior الأحد 1 مارس 2009 - 14:01


    السلام عليكم
    الدرس ده عشان تاسكات الاواس فى الفايل سيستم
    ---------------------------------------
    التعامل مع الملفات سواء عاوز اكتب او اقرى او اجيب معلومات عن الملف ذات نفسه اوا مسح ملف اسمه io -->input/ouput
    موجود فى النيم سبيس
    using System.IO;
    الفايل سيستم عباره عن اما ملفات واما فولدرات (فى لغه البرمجه اسمها directory)
    طب والدرايفات راحت فين؟؟
    قالك مش هنعتبرها من الفايل سيستم عشان مش ممكن نطبق عليها ميثود الفابل سيستم يعنى مثلا مش ينفع امسح درايف
    يبقى كده عندى اتنين كلاس file -directory
    كلاسات التعامل مع الملفات فى السى شارب بتنقسم لاتنين من حيث الهدف وطريقه الاستخدام
    اول نوع اسمه utility والتانى info
    والفرق بين الاتنين
    utility --> بنطبق بيها العمليات الاساسيه عل اى ملف زى انقل ملف -امسح ملف- اعمل ملف جديد
    اليمثودس فى الكلاس بتاعها من نوع ستاتيك
    يعنى لو عاوز اعمل ملف جديد
    file.create("c:\\folder");
    (خدوا بقالكو ا كتبت اتنين سلاش عشان السلاش ليها معنى خاص فى السى شارب بس انى اقعد اكتب دبل سلاش حركه غبيه خصوصا لو المكان بتاع الفابل طويل
    ففيه حركه فى السى شارب نختصر بيها الموضوع نستخدم علامه @ كده

    File.Delete(@"c:\folder\filename.html")

    لو انا جيت كده وحبيت امسح ملف مش موجود هيطلع علطول Exception
    فالحل انى اتكد ان الملف موجود اساسا

    if(File.Exists(@"c:\folder\filename.html"))
    {
    }

    اشهر الميثود
    copy-create-delete-exists-move-replace

    File.GetCreationTime

    ديه بتجيب وقت انشاء الملف وممكن نعدل فيه
    من
    File.SetCreationTime
    ________________________________
    الفولردات نفس الحكايه

    Directory.CreateDirectory(Path);
    Directory.Exists(Path);
    Directory.Move(source, destination);

    ------------------------------------------------------------
    تانى نوع واللى هو info
    الكلاس بتاعتها اسمها دايما زى النوع الاول بس مع اضافه info فى الاخر
    يعنى
    fileinfo-directoryinfo
    الميثودس فى النوع ده من نوع instance
    فيبقى لازم اعمل اوبجكت

    FileInfo file = new FileInfo(Path);
    DirectoryInfo folder = new DirectoryInfo(Path);
    فايده النوع ده بقى انى بربطه بملف معين
    فبجيب كل المعلومات الخاصه بالملف ده
    زى acl بتاعه
    والبنسبه للميثودس فهيا هيا نفس النوع الاولانى
    ويجى السؤال
    امتى استخدم ديه او ديه؟؟
    لو حضرتك عاوز تنفذ كود عل ملف مره واحده
    يبقى النوع الاولانى
    لو هتطبق الكود فى اماكن كتيره فى البرنامج
    يبقى النوع التانى لان كل اللى عليك هتستخدم الاوبجكت
    مش كل مره هتعمل ملف جديد
    كمان لو كل اللى هتعمله انك تطلق file operation
    الاساسيه زى الكوبى والبست والموف والديليت
    يبقى النوع الاولانى
    لو عاوز تخش فى صلاحيات الملفات وتلعب فيها يبقى النوع التانى
    ________________________________________________________________________
    ده بقى الجزء المهم فى التاسك
    الفولدر جوه فولدرات وملفات
    تمام
    عاوزين بقى نجيب االفولرات الاول
    هتلاقى عندك

    string[] subfolders = Directory.GetDirectories(@"c:\");
    هترجعلى اراى باسامى السب فولدرز
    لما اعوز بقى احول الاسم بتاع السب فودلر لdirectory

    DirectoryInfo subfolder=new DirectoryInfo(subfolder[0]);
    وعشان هيا اراى فنطبق عليها لوب

    وممكن بطريقه تانيه

    DirectoryInfo parentFolder = new DirectoryInfo(@"c:\");
    DirectoryInfo[] subfolders = parentFolder.GetDirectories();
    خدوا بقالو الطريقه الاولى كانت بترجع اراى من السترنج
    الطريقه التانيه بترجع directoryinfo
    الملفات نفس الطريقه

    DirectoryInfo parentFolder = new DirectoryInfo(@"c:\");
    FileInfo[] subfolders = parentFolder.GetFiles();

    والطريقه التانيه

    string[] files = Directory.GetFiles(@"c:\");
    ___________________________________________________
    نجى بقى عل عدد الملفات والفولدرات
    دلوقتى انا خلاص جيبت اراى من الملفات مثلا
    اجيبهم عددهم ازاى؟؟؟؟؟؟؟؟؟؟
    من الكود اللى فات الملفات هترجعلى اراى فممكن اجيب الlength بتاعها
    int filesCount=files.length;
    نفس الحكايه فى الفولدرات
    int subfolders_Count=subfolders.length;
    فيه حل تانى ظريف لو انا مش محتاج انى اجيب الاراى اسااسا

    int Count = Directory.GetDirectories(@"c:\").Length;
    بسسسسسسسسسسسس كده
    لا مش بس
    لان كل فولدر ممكن يكون جوه سب فولدرات تانيه وكل واحد من السب فولدرز جواه برضك لما ملفات او فولدرات
    فالحل حاجه من اتنين
    استخدم recursive
    او stack
    الريكسف انى اعمل ميثود بتجيب اول فولدر
    تجيب الفولدرات اللى فيه تخد اول واحد وتنده على نفسها تانى عشان تجيب الفولدرات الىل جواه
    وتفضل كده لحد ما تخلص كل السب فولدرز
    بالاسلوب ده

    public static void GetSubDirectories(string path)
    {
    string[] childs = Directory.GetDirectories(path);
    foreach (string child in childs)
    {
    GetSubDirectories(child);
    }

    }
    ممكن تغيروا نوع البراميتر لا directoryinfo وتعدولو فى الباقى
    الستاك بقى ده درس تانى
    https://noor-fci.yoo7.com/montada-f97/topic-t6262.htm
    _______________________________________________________
    الدريفات بقى
    زى ما قولنا مش بتعتبر من الفايل سيستم عشان مش مشتركه مع كلاسات الفايل سيستم فى ميثودس كتيره
    التعامل معاها بقى
    عاوز اعرف درايف

    DriveInfo partition= new DriveInfo(@"c:\");
    مش ملاحظين حاجه
    انى كتبت اسم الدرايف وقبل كده كتبت نفس الاسم فى كفولدر
    ده بقى عشان فى السى شارب
    ممكن احول الدرايف لdirectory
    لما اجى اتعامل معها بالكود ( مش فى الحقيق)
    وده عشان اخش عليه وجيب اللى جواه

    DirectoryInfo dir = partition.RootDirectory();
    اشهر الميثودس

    long freeSize = partiton.AvailableFreeSpace;
    بتجيب المساحه الفاضيه
    لو عاوزين نعرف نوع الدرايف هو زى السى والدى وكده ولا اسطوانه ولا فلاشه ولا شبكه

    DriveType t = partiton.DriveType;

    لو عاوزين نجيب بقى الدرايفات اللى فى الجهاز
    نفس الطريقه القديمه

    DriveInfo[] partitons = DriveInfo.GetDrives();
    Exceptionولو حاولنا نعمل لوب نخش بيه عل كل درايف هيعمل
    عشان فيه درايفات مش بتبقى جاهزه اننا نخش عليها
    زى لو حضرتك مش حاطط اسطوانه فى السيدى روم
    الحل انك تتاكد ان الدرايف جاهز

    if (partitons[0].IsReady)
    { }
    وفى طريقه تانيه تجيب بيها الدرايفات

    string[] partitions= Environment.GetLogicalDrives();
    بسسسسسسسسسسسسس كده
    اى كوسشين Question


    عدل سابقا من قبل cs_senior في الأحد 1 مارس 2009 - 15:39 عدل 1 مرات
    avatar
    زائر
    زائر


    c# io Empty رد: c# io

    مُساهمة من طرف زائر الأحد 1 مارس 2009 - 14:16

    good ya dia2

      الوقت/التاريخ الآن هو الجمعة 15 نوفمبر 2024 - 4:49