通过比较2个文件夹在子文件夹中的区别

问题描述:

对于我的工作,我需要比较2个网络文件夹。我需要将丢失的子文件夹的名称输出到.txt文件。通过比较2个文件夹在子文件夹中的区别

例子:

Folder1 
    -Sub1 
    -Sub2 
    -Sub4 

Folder2 
    -Sub1 
    -Sub3 
    -Sub4 

输出:

Missing Sub2, Sub3 

我怎样才能做到这一点?

+2

看看Directory.GetDirectories:https://msdn.microsoft.com/en-us/library/c1sez4sc(v=vs.110).aspx。您可以比较并提取丢失的目录,并使用StreamWriter将它们输出到文件中:https://msdn.microsoft.com/en-us/library/system.io.streamwriter(v=vs.110).aspx –

+0

示例在这两个链接应该可以帮助你实现你需要的东西 –

+1

你有没有尝试过任何东西?我们不会为您完成完整的编码。查看[DirectoryInfo](https://msdn.microsoft.com/en-us/library/system.io.directoryinfo(v = vs.110).aspx)类和[Directory.GetDirectories()](https: //msdn.microsoft.com/en-us/library/ms143325(v=vs.110).aspx)方法,请阅读[LINQ](https://msdn.microsoft.com/de-de/library/bb763068 .aspx),尤其是[Intersection](https://msdn.microsoft.com/en-us/library/bb460136(v = vs.110).aspx),如果遇到具体问题,请返回。 –

下面我写了抓取每个文件夹的子目录的代码。然后通过这些目录循环获取文件夹的名称。它从每个文件夹中找到丢失的子目录,并将它们收集到2个列表中。

我怀疑有比这里的方式更容易做到这一点,但它的工作原理。

'Declare lists for each folders 
    Dim folder1SubDirectories As New List(Of String) 
    Dim folder1SubNames As New List(Of String) 
    Dim folder2SubDirectories As New List(Of String) 
    Dim folder2SubNames As New List(Of String) 


    'Declare folders locations as variables 
    Dim folder1Location As String = "Folder1 path location" 
    Dim folder2Location As String = "Folder2 path location" 

    'add the subdirectories of each folder into the appropriate list 
    folder1SubDirectories.AddRange(Directory.GetDirectories(folder1Location)) 

    'add the name of the subdirectory to a new list 
    For Each subfolder In folder1SubDirectories 
     Dim dirInfo As New System.IO.DirectoryInfo(subfolder) 
     folder1SubNames.Add(dirInfo.Name) 
    Next 

    'add the subdirectories of each folder into the appropriate list 
    folder2SubDirectories.AddRange(Directory.GetDirectories(folder2Location)) 

    'add the names of the subddirectories into a new list 
    For Each subfolder In folder2SubDirectories 
     Dim dirInfo As New System.IO.DirectoryInfo(subfolder) 
     folder2SubNames.Add(dirInfo.Name) 
    Next 

    'The below LINQ finds the missing subdirectories and puts them in them in the list 
    Dim missingSubs = folder1SubNames.Union(folder2SubNames).Except(folder1SubNames.Intersect(folder2SubNames)).ToList() 

    'Now you can do whatever you need to do with the missing subdirectories 
    For Each missingSub In missingSubs 
     Console.WriteLine(missingSub) 
    Next 


    Console.ReadLine()