Example #1
0
        //string path = @"/run/user/1000/gvfs/smb-share:server=mdvstore,share=video/UsersTestArea/max/";
        // string path = @"Z:\UsersTestArea\max\test";

        void DirSearch(string sDir, ref List <FINFO> fileList)
        {
            try
            {
                foreach (string d in Directory.GetDirectories(sDir))
                {
                    foreach (string f in Directory.GetFiles(d))
                    {
                        if (canBeDisplayed(f) == false)
                        {
                            continue;
                        }
                        FINFO finfo = new FINFO();
                        finfo.fullPath = f;
                        finfo.size     = new FileInfo(f).Length;
                        fileList.Add(finfo);
                    }
                    DirSearch(d, ref fileList);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
        }
Example #2
0
        private void button1_Click(object sender, EventArgs e)
        {
            folderBrowserDialog1.ShowDialog();
            path                = folderBrowserDialog1.SelectedPath;
            dirInfo             = new Dictionary <string, DirInfo>();
            dupList             = new List <Item>();
            button1.Parent.Text = "Loading file list";
            List <FINFO> fileList = new List <FINFO>();

            DirSearch(path, ref fileList);
            //Console.WriteLine("Sorting");
            fileList.Sort(new FINFOComparer());
            if (fileList.Count == 0)
            {
                return;
            }
            button1.Parent.Text = "Checking";

            FINFO key   = fileList[0];
            int   found = 0;

            listBox1.ValueMember   = "itemInfo";
            listBox1.DisplayMember = "text";
            dupList = new List <Item>();
            int step = (int)(fileList.Count / 100);

            if (step == 0)
            {
                step = 1;
            }
            for (int i = 1; i < fileList.Count; i++)
            {
                if ((i % step) == 0)
                {
                    button1.Parent.Text = "Checking " + (i / (double)step).ToString() + "%";
                }
                FINFO current = fileList[i];
                if (key.size == current.size)
                {
                    string keyName     = System.IO.Path.GetFileName(key.fullPath).ToUpper();
                    string currentName = System.IO.Path.GetFileName(current.fullPath).ToUpper();
                    if (keyName == currentName)
                    {
                        ItemInfo ii = new ItemInfo();
                        ii.x = key;
                        ii.y = current;
                        Item item = new Item(keyName, ii);
                        dupList.Add(item);
                        //Console.WriteLine("{0} {1}", key.fullPath, current.fullPath);
                        found++;
                    }
                }
                key = current;
            }

            button1.Parent.Text = "Arranging...";

            foreach (Item item in dupList)
            {
                string dirPath;
                dirPath = System.IO.Path.GetDirectoryName(item.itemInfo.x.fullPath);
                if (dirInfo.ContainsKey(dirPath))
                {
                    DirInfo di = dirInfo[dirPath];
                    di.dupCount      = di.dupCount + 1;
                    dirInfo[dirPath] = di;
                }
                else
                {
                    DirInfo di = new DirInfo();
                    di.dupCount      = 1;
                    dirInfo[dirPath] = di;
                }
                dirPath = System.IO.Path.GetDirectoryName(item.itemInfo.y.fullPath);
                if (dirInfo.ContainsKey(dirPath))
                {
                    DirInfo di = dirInfo[dirPath];
                    di.dupCount      = di.dupCount + 1;
                    dirInfo[dirPath] = di;
                }
                else
                {
                    DirInfo di = new DirInfo();
                    di.dupCount      = 1;
                    dirInfo[dirPath] = di;
                }
            }
            Dictionary <string, DirInfo> tmp = new Dictionary <string, DirInfo>(dirInfo);

            foreach (string dirPath in tmp.Keys)
            {
                int count = 0;
                for (int i = 0; i < dupList.Count; i++)
                {
                    string dp;
                    dp = System.IO.Path.GetDirectoryName(dupList[i].itemInfo.x.fullPath);
                    if (dp == dirPath)
                    {
                        count++;
                    }
                    dp = System.IO.Path.GetDirectoryName(dupList[i].itemInfo.y.fullPath);
                    if (dp == dirPath)
                    {
                        count++;
                    }
                }
                DirInfo di = dirInfo[dirPath];
                di.totalFiles    = count;
                dirInfo[dirPath] = di;
            }
            //System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
            //sw.Start();
            //sw.Stop();
            //System.Diagnostics.Debug.WriteLine(sw.ElapsedMilliseconds.ToString());
            ReorderList();
            totalDup.Text       = String.Format("Found {0} duplicates", dupList.Count.ToString());
            button1.Parent.Text = "Done";
        }