مقایسه فایلها و پوشه های 2 پوشه؟ - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

مقایسه فایلها و پوشه های 2 پوشه؟

0 امتیاز
با سلام من کد کنسول برنامه ای رو میخوام که آدرس 2 تا فلدر را بگیرد و فایلها و فلدرهای آنهارو با هم مقایسه کنه اگه تکراری داشت پاک کنه و گزارش بده فقط در محیط کنسول باشه ممنون.
سوال شده اسفند 17, 1392  بوسیله ی daniyaltjm (امتیاز 840)   47 88 103

1 پاسخ

+2 امتیاز
 
بهترین پاسخ

سلام.

کد زیر رو امتحان کنید ببینید مشکلتون رو حل میکنه :

DirectoryInfo di1 = new DirectoryInfo("d:\\test1");
            DirectoryInfo di2 = new DirectoryInfo("e:\\test2");
            DirectoryInfo[] dirrr1 = di1.GetDirectories("*.*",SearchOption.AllDirectories);
            DirectoryInfo[] dirrr2 = di2.GetDirectories("*.*", SearchOption.AllDirectories);
            foreach (FileInfo fi1 in di1.GetFiles())
            {
                foreach (FileInfo fi2 in di2.GetFiles())
                {
                    if (fi1.Extension == fi2.Extension && fi1.Name == fi2.Name)
                    {
                        fi2.Delete();
                        Console.WriteLine(string.Format("the file {0} deleted", fi2.Directory + "\\" + fi2.Name));
                    }
                }
            }
            foreach (DirectoryInfo df1 in dirrr1)
            {
                foreach (DirectoryInfo df2 in dirrr2)
                {
                    foreach (FileInfo fi1 in df1.GetFiles())
                    {
                        foreach (FileInfo fi2 in df2.GetFiles())
                        {
                            if (fi1.Extension == fi2.Extension && fi1.Name == fi2.Name)
                            {
                                fi2.Delete();
                                Console.WriteLine(string.Format("the file {0} deleted", fi2.Directory + "\\" + fi2.Name));
                            }
                        }
                    }
                }
            }

 

پاسخ داده شده اسفند 17, 1392 بوسیله ی veniz2008 (امتیاز 2,083)   1 5 21
انتخاب شد اسفند 17, 1392 بوسیله ی daniyaltjm
سپاس مشکل حل شد. فقط این کد Console.WriteLine(string.Format("the file {0} deleted", fi2.Directory + "\\" + fi2.Name)); این فسمت : string.Format("the file {0} deleted" رو متوجه نمیشم؟ {0} چیه؟
این یک سبک نوشتن رشته ها هستش که رشته رو فرمت (قالب) بهش میدن .نحوه کارش به اینصورته که عبارت داخل دابل کوتیشن عینا چاپ میشه به جز مواردی که placeholder دارند. منظور از placeholder همون {0} یا {1} و ... هستش. در اینگونه حالات، بعد از بستن دابل کوتیشن باید به تعداد place holder ها ورودی بدید. راه دیگه برای چاپ رشته بالا این بود :
Console.WriteLine("the file " + fi2.Name +   "\\ deleted");
دقیقا من مشکلم با {0} هست یعنی چی؟ مثل آرایه هستن؟ مقدارشون چطوری افزایش پیدا میکنه؟
ببینید {0} یعنی اولین مقدار بعد از بستن رشته. همیشه (تاکید میکنم همیشه) اولین مقدار بعد از بستن رشته بصورت اتوماتیک درون {0} قرار می گیره، دومین مقدار دنبال {1} میگرده، سومین مقدار دنبال {2} میگرده و ...
شما میتونی درون رشته ای که تعریف میکنی، {0} یا {1} یا ... رو به ترتیب نذارید. فقط یادتون باشه نمی تونید هر شماره ای رو قرار بدید. مثلا اگر درون رشته {3} بذارید کامپایلر به اینصورت تفسیر میکنه که شما 4 مقدار ورودی داشتید و بعد از بستن رشته، دنبال چهارمین ورودی هست تا جایگزین {3} کنه و اگر بهش 3 ورودی بدید، با خطای زمان اجرا مواجه خواهید شد. بنابراین شماره این placeholder ها باید متناسب با تعداد ورودی هاتون باشه. گرچه می تونید ترتیب قرارگیری این placeholder ها رو بهم بزنید ولی توصیه نمی کنم چنین کاری انجام بدید. یکی از کابردهای خوب این نوع فرمت دهی اینه که از تکرار متغیرهای ورودی که باید چندین بار ذکر بشن جلوگیری میکنه. مثلا فرض کنید یه عدد بهتون میدن و میگن توان2، جذر و زوج یا فرد بودن این عدد رو مشخص و با پیغام مناسب چاپ کنید. کد زیر رو دقت کنید :
Console.Write("please enter one number : ");
            int num = Convert.ToInt32(Console.ReadLine());
            long square = num * num;
            double SquareRoot = System.Math.Sqrt(num);
            string flag = string.Empty;
            if (num / 2 == 0)
                flag = "even";
            else
                flag = "odd";
   Console.WriteLine(string.Format("the square for number {0} is {1}, the Square Root for number {0} is {2} and number {0} is {3} ", num, square,SquareRoot,flag));
در این کد، کامپایلر هرجایی در متن که {0} می بینه خودکار میره اولین مقدار بعد از بستن رشته (در اینجا num) رو میخونه. هر جایی که {1} می بینه میره دومین مقدار بعد از رشته رو میخونه و ...
همونطور که می بینید {0} که اشاره به عدد ورودی توسط کاربر داره، چندین بار در رشته و در جاهای مختلف تکرار شده و کامپایلر هر بار که به {0} میرسه میره اولین مقدار رو میخونه و جایگزین میکنه. اگر از این روش استفاده نمیکردیم باید 3 بار متغیر num رو ذکر میکردیم یعنی :
Console.WriteLine("the square for number " + num + " is " + square + ", the Square Root for number " + num + " is " +  SquareRoot + " and number " + num + "is " + flag );
امیدوارم مطلب خوب جا افتاده باشه.
موفق باشید.
سپاس کاملا فهمیدم . حالا میشه یک توضیح در مورد کل کد بالا بگین ببینم چطوری کار میکنه خیلی ممنون.
...