Record https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/concepts/linq/linq-and-file-directories learning
Query with the specified file extensions ( SearchOption.AllDirectories refers folders recursively get all the files)
string startFolder = @"C:\Users\bibi\Desktop\代码\异步\ConsoleApp4\Test\"; DirectoryInfo dir = new DirectoryInfo(startFolder); IEnumerable<FileInfo> fileList = dir.GetFiles("*.*", SearchOption.AllDirectories); var fileQuery = from file in fileList where file.Extension == ".png" orderby file.Name select file; foreach(var item in fileQuery) { Console.WriteLine(item.FullName); }
By extension group files
// Take a snapshot of the file system. string startFolder = @"C:\Users\bibi\Desktop\代码\异步\ConsoleApp4\Test\"; // Used in WriteLine to trim output lines. int trimLength = startFolder.Length; // Take a snapshot of the file system. System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(startFolder); // This method assumes that the application has discovery permissions // for all folders under the specified path. IEnumerable<System.IO.FileInfo> fileList = dir.GetFiles("*.*", System.IO.SearchOption.AllDirectories); var queryGroupByExt = from file in fileList group file by file.Extension.ToLower() into fileGroup orderby fileGroup.Key select fileGroup; foreach(var group in queryGroupByExt) { Console.WriteLine(group.Key); foreach(var item in group) { Console.WriteLine($" {item.Name}"); } }
The total number of bytes of all files in the directory request
string startFolder = @"C:\Users\bibi\Desktop\代码\异步\ConsoleApp4\Test\"; System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(startFolder); var totalLength = dir.GetFiles().Sum(x=>x.Length); Console.WriteLine(totalLength+" bytes");
Docking file folder (SEQ seeking et SequenceEqual, intersection Insect, difference sets the Except)
String pathA = @ " C: \ the Users \ Bibi \ Desktop \ Code \ asynchronous \ ConsoleApp4 \ the Test \ " ; String pathB = @ " C: \ the Users \ Bibi \ Desktop \ Code \ asynchronous \ ConsoleApp4 \ the Test \ testX \ " ; dir1 System.IO.DirectoryInfo = new new System.IO.DirectoryInfo (pathA); System.IO.DirectoryInfo dir2 = new new System.IO.DirectoryInfo (pathB);
// use the top-level directory SearchOption.TopDirectoryOnly, without the recursive directory folder to find the file, as long as the first layer file. The IEnumerable <System.IO.FileInfo for> = dir1.GetFiles List1 ( " * *. " , SearchOption.TopDirectoryOnly); the IEnumerable <System.IO.FileInfo for> List2 = dir2." . * * " , SearchOption.TopDirectoryOnly); // Use default custom file comparator FileCompare myFileCompare = new new FileCompare (); // determine whether two sequences are equal BOOL isEqualOne = list1.SequenceEqual (List2, myFileCompare); IF (== isEqualOne to true ) { Console.WriteLine ( " The Folders are TWO The Same " ); } the else { Console.WriteLine ( " of The TWO Folders are Not The Same " ); } // intersection of file var queryCommonFiles = list1.Intersect(list2, myFileCompare); if (queryCommonFiles.Any()) { Console.WriteLine("The following files are in both folders:"); foreach (var v in queryCommonFiles) { Console.WriteLine(v.FullName); //shows which items end up in result list } } //求差集文件 在list1却不在list2的文件 var queryList1Only = list1.Except(list2, myFileCompare); Console.WriteLine("The following files are in list1 but not list2:"); foreach (var v in queryList1Only) { Console.WriteLine(v.FullName); }