private void searchMovedFilesToolStripMenuItem_Click(object sender, EventArgs e) { Utils.MessageBox("We'll go through every deleted file (exists on the Left " + "but not the Right) and see if it is just the result of a " + "moved or renamed file (a file with same contents already exists on Right)."); var query = (from item in listView.Items.Cast <FileComparisonResult>() where item.Type == FileComparisonResultType.Left_Only select item).ToList(); StartBgAction(() => { // retrieve a list of the items that are actually moved files var results = SortFilesSearchDuplicates.SearchMovedFiles( _settings.LeftDirectory, _settings.RightDirectory, query); WrapInvoke(() => { // show the result in the UI, in the left-most column Utils.MessageBox("Found " + results.Count + " moved file(s)."); foreach (var item in results) { item.Item1.SubItems[0].Text = item.Item2; } listView.Refresh(); }); }); }
static void TestMethod_TestSearchMovedFiles() { var settings = new SortFilesSettings(); var left = TestUtil.GetTestSubDirectory("left_fndmved", true); var right = TestUtil.GetTestSubDirectory("right_fndmved", true); settings.LeftDirectory = left; settings.RightDirectory = right; // first, set up test files File.WriteAllText(left + Utils.Sep + "onlyleft.txt", "onlyL"); File.WriteAllText(left + Utils.Sep + "renamed1.txt", "renamed1"); File.WriteAllText(left + Utils.Sep + "renamed2.txt", "renamed2"); File.WriteAllText(left + Utils.Sep + "empty1.txt", ""); File.WriteAllText(left + Utils.Sep + "changed1.txt", "123"); File.WriteAllText(left + Utils.Sep + "same.txt", "s"); File.WriteAllText(right + Utils.Sep + "onlyright.txt", "onlyR"); File.WriteAllText(right + Utils.Sep + "renamed1.a", "renamed1"); File.WriteAllText(right + Utils.Sep + "renamed2.a", "renamed2"); File.WriteAllText(right + Utils.Sep + "empty1.a", ""); File.WriteAllText(right + Utils.Sep + "changed1.txt", "124"); File.WriteAllText(right + Utils.Sep + "same.txt", "s"); // set last-write-times var dtNow = DateTime.Now; foreach (var filename in Directory.EnumerateFiles(left).Concat( Directory.EnumerateFiles(right))) { File.SetLastWriteTimeUtc(filename, dtNow); } File.SetLastWriteTimeUtc(right + Utils.Sep + "changed1.txt", dtNow.AddDays(1)); // run search-for-differences var results = SortFilesSearchDifferences.Go(settings); var expectedDifferences = @"|empty1.a|Right |onlyright.txt|Right |renamed1.a|Right |renamed2.a|Right changed1.txt|changed1.txt|Changed empty1.txt||Left onlyleft.txt||Left renamed1.txt||Left renamed2.txt||Left"; CompareResultsToString(results, expectedDifferences); // run search for moved files var query = from item in results where item.Type == FileComparisonResultType.Left_Only select item; var resultsMoved = SortFilesSearchDuplicates.SearchMovedFiles( settings.LeftDirectory, settings.RightDirectory, query); TestUtil.IsEq(2, resultsMoved.Count); // the 0-length empty.txt isn't included in this list, we don't treat it as a duplicate TestUtil.IsEq(Utils.Sep + "renamed1.txt", resultsMoved[0].Item1.FileInfoLeft.Filename); TestUtil.IsEq(Utils.Sep + "renamed1.a", resultsMoved[0].Item2); TestUtil.IsEq(Utils.Sep + "renamed2.txt", resultsMoved[1].Item1.FileInfoLeft.Filename); TestUtil.IsEq(Utils.Sep + "renamed2.a", resultsMoved[1].Item2); }