//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); } }
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"; }