private static IEnumerable <IGrouping <string, FileItem> > CreateGrouping_FileExtensions(FolderItem rootFolder) { return //From root folder ... (rootFolder //Select all descendant files ... .DescendantFiles() //Then order the files by file path ... .OrderBy(item => item.ItemPath) //Then group files by extension .GroupBy(item => item.ItemExtension.ToLower()) //Then order the groups by thier keys .OrderBy(item => item.Key)); }
private static IEnumerable <IGrouping <string, FileItem> > CreateGrouping_DuplicateFileSizesPlusNames(FolderItem rootFolder) { return //From root folder ... (rootFolder //Select all descendant files .. .DescendantFiles() //Then order the files by file path ... .OrderBy(item => item.ItemPath) //Then group the items by a string containing the (size + name) of files .GroupBy(item => item.FileSize().ToString("X8") + "-" + item.ItemName.ToLower()) //Only select groups having more then one file .Where(item => item.Count() > 1) //Then order the groups by thier keys .OrderBy(item => item.Key)); }
private static IEnumerable <IGrouping <string, FileItem> > CreateGrouping_AllEnglishKeywords(FolderItem rootFolder) { var englishWordsList = LoadEnglishWordsList(); return //From root folder ... (rootFolder //Select all descendant files ... .DescendantFiles() //Only select files having all keywords as english keywords in their names .Where(item => item.ItemNameHasAllKeywordsFrom(englishWordsList)) //Then order the files by file path ... .OrderBy(item => item.ItemPath) //And put all files in a single group .GroupBy(item => "All files with all english keywords")); }
private static IEnumerable <IGrouping <string, FileItem> > CreateGrouping_DuplicateFiles(FolderItem rootFolder) { return //From root folder ... (rootFolder //Select all descendant files ... .DescendantFiles() //Then group them by size ... .GroupBy(item => item.FileSize()) //Then select the groups having more than one file .Where(item => item.Count() > 1) //Then flatten the groups into a list of files .SelectMany(item => item) //Then order the files by path .OrderBy(item => item.ItemPath) //Then group the files by (size + data hash) .GroupBy(item => item.FileSize().ToString() + "-" + item.Md5DataHash()) //Then select the groups having more than one file .Where(item => item.Count() > 1) //Then order groups by (size + data hash) key .OrderBy(item => item.Key)); }