сравнивая две папки на разницу - PullRequest
0 голосов
/ 14 октября 2019

Привет, в настоящее время я работаю над консольным приложением ac #, которое будет сравнивать две папки на предмет разностного содержимого

Folder1
  folder A
  folder B
  folder C

Folder 2
  folder A
  folder B
  folder C

Концепция проекта - каждые 1 час. Он будет проверять, являются ли папки 1 и 2то же самое, если не будет выглядеть имена подпапок, которые имеют разные. Есть ли способ сравнить разницу этих папок

У меня есть эти в моем коде, но не знаю, что дальше

 static void Main(string[] args)
        {
            string path1= @"C:\Users\nx011116\Documents\test folder\server";
            string path2 = @"C:\Users\nx011116\Documents\test folder\sharedfolder";

            DirectoryInfo dir1 = new DirectoryInfo(path1);
            DirectoryInfo dir2 = new DirectoryInfo(path2);

            IEnumerable<FileInfo> list1 = dir1.GetFiles("*.*",SearchOption.AllDirectories);
            IEnumerable<FileInfo> list2 = dir2.GetFiles("*.*", SearchOption.AllDirectories);
        }

Мне нужно убедиться, что обе папки одинаково одинаковывключая файл журнала внутри подпапки

Ответы [ 2 ]

0 голосов
/ 14 октября 2019
Get all directories name.

 string [] subdirectoryEntries1 = Directory.GetDirectories("folder1path");
 string [] subdirectoryEntries2 = Directory.GetDirectories("folder1path");

Get all files name
  foreach(string dir in subdirectoryEntries1)
  {
     string [] fileEntries = Directory.GetFiles(dir);
     foreach(string file in fileEntries )
     {
        Console.WriteLine(Path.GetFileName(file));
     }
  }

now you can use LINQ

var diff1= subdirectoryEntries1.Except(subdirectoryEntries2)
var diff2= subdirectoryEntries2.Except(subdirectoryEntries1)
0 голосов
/ 14 октября 2019
private List<string> GetDiffOfSubfolders(string source, string dest)
{
    DirectoryInfo sourceDir = new DirectoryInfo(source);

    DirectoryInfo destinationDir = new DirectoryInfo(dest);

    var subDirsSrc = sourceDir.GetDirectories();
    var subDirsDesc = destinationDir.GetDirectories();
    var subDirsDescFolderNames = subDirsDesc.Select(x => x.Name).ToList();

    List<string> notMatchedSubFolders = new List<string>();

    foreach (var folder in subDirsSrc)
    {
        if (subDirsDescFolderNames.Contains(folder.Name))
        {
            DirectoryInfo sourceSubDir = new DirectoryInfo(folder.FullName);
            var list1 = sourceSubDir.GetFiles("*", SearchOption.AllDirectories).Select(x => Path.GetFileName(x.FullName));

            string destinationSubFolderName = subDirsDesc.FirstOrDefault(x => x.Name == folder.Name).FullName;
            DirectoryInfo destSubDir = new DirectoryInfo(destinationSubFolderName);
            var list2 = destSubDir.GetFiles("*", SearchOption.AllDirectories).Select(x => Path.GetFileName(x.FullName));

            var diff = list1.Except(list2);

            if (diff.Any())
            {
                notMatchedSubFolders.Add(folder.FullName);
            }
        }
        else
        {
            notMatchedSubFolders.Add(folder.FullName);
        }
    }

    return notMatchedSubFolders;
}
...