zoukankan      html  css  js  c++  java
  • 比较两个文件夹的内容

    使用LINQ比较两个文件夹内容(长度和文件名)

     1 static void CompareTwoFolders()
     2         {
     3             // Create two identical or different temporary folders 
     4             // on a local drive and change these file paths.
     5             string pathA = @"C:\TestDir";
     6             string pathB = @"C:\TestDir2";
     7 
     8             System.IO.DirectoryInfo dir1 = new System.IO.DirectoryInfo(pathA);
     9             System.IO.DirectoryInfo dir2 = new System.IO.DirectoryInfo(pathB);
    10 
    11             // Take a snapshot of the file system.
    12             IEnumerable<System.IO.FileInfo> list1 = dir1.GetFiles("*.*", System.IO.SearchOption.AllDirectories);
    13             IEnumerable<System.IO.FileInfo> list2 = dir2.GetFiles("*.*", System.IO.SearchOption.AllDirectories);
    14 
    15             //A custom file comparer defined below
    16             FileCompare myFileCompare = new FileCompare();
    17 
    18             bool areIdentical = list1.SequenceEqual(list2, myFileCompare);
    19 
    20             if (areIdentical == true)
    21             {
    22                 Console.WriteLine("the two folders are the same");
    23             }
    24             else
    25             {
    26                 Console.WriteLine("The two folders are not the same");
    27             }
    28 
    29             // Find the common files. It produces a sequence and doesn't 
    30             // execute until the foreach statement.
    31             var queryCommonFiles = list1.Intersect(list2, myFileCompare);
    32 
    33             if (queryCommonFiles.Count() > 0)
    34             {
    35                 Console.WriteLine("The following files are in both folders:");
    36                 foreach (var v in queryCommonFiles)
    37                 {
    38                     Console.WriteLine(v.FullName); //shows which items end up in result list
    39                 }
    40             }
    41             else
    42             {
    43                 Console.WriteLine("There are no common files in the two folders.");
    44             }
    45 
    46             // Find the set difference between the two folders.
    47             // For this example we only check one way.
    48             var queryList1Only = (from file in list1
    49                                   select file).Except(list2, myFileCompare);
    50 
    51             Console.WriteLine("The following files are in list1 but not list2:");
    52             foreach (var v in queryList1Only)
    53             {
    54                 Console.WriteLine(v.FullName);
    55             }
    56 
    57         }
    58 
    59         class FileCompare : System.Collections.Generic.IEqualityComparer<System.IO.FileInfo>
    60         {
    61             public FileCompare() { }
    62 
    63             public bool Equals(System.IO.FileInfo f1, System.IO.FileInfo f2)
    64             {
    65                 return (f1.FullName == f2.FullName &&
    66                         f1.Length == f2.Length);
    67             }
    68 
    69             public int GetHashCode(System.IO.FileInfo fi)
    70             {
    71                 string s = String.Format("{0}{1}", fi.Name, fi.Length);
    72                 return s.GetHashCode();
    73             }
    74         }
  • 相关阅读:
    对MFC文档、视图、框架的理解
    MFC中快速将CVIew转换成CScrollView
    MFC中的一个错误
    单文档中视图与文档的相互
    python函数
    python模块介绍和引入
    python面向对象和面向过程
    python数据类型2
    python数据类型
    python无法使用input功能
  • 原文地址:https://www.cnblogs.com/dingshouqing/p/2392228.html
Copyright © 2011-2022 走看看