目前我有3个词典:
private Dictionary<string, List<string>> oldList = new Dictionary<string, List<string>>();
private Dictionary<string, List<string>> newList = new Dictionary<string, List<string>>();
private Dictionary<string, List<string>> patchList = new Dictionary<string, List<string>>();
oldList和newList填充了一个目录,所有这些都是子目录和文件,其中根目录和子目录是密钥,文件是目录中所有文件的内部列表。
用于填充newList的代码:
private void ProcessDirectory(string targetFolder)
{
List<string> newInnerList = new List<string>();
newList.Add(targetFolder, newInnerList);
newInnerList = newList[targetFolder];
foreach (string file in Directory.GetFiles(targetFolder))
newInnerList.Add(Path.GetFileName(file));
foreach (string dir in Directory.GetDirectories(targetFolder))
ProcessDirectory(dir);
}
现在我想将newList与oldList进行比较,找出哪些文件已更改,以及旧列表没有的新列表文件。
答案 0 :(得分:6)
迭代文件夹并调用一个函数传递两个路径,并在三个不同的序列中产生差异(A中不在B中的文件和B中不在A中的文件以及更改的文件中的文件)。
如果您愿意,另一种解决方案:
var sourceFiles = Directory.GetFiles(source, "*", SearchOption.AllDirectories).Select(o => o.Replace(source, ""));
var targetFiles = Directory.GetFiles(target, "*", SearchOption.AllDirectories).Select(o => o.Replace(target, ""));
var sourceFilesNotInTarget = sourceFiles.Except(targetFiles);
var targetFilesNotInSource = targetFiles.Except(sourceFiles);
var changedFiles = sourceFiles.Join(targetFiles, a => CheckSum(a, source), b => CheckSum(b, target), (a, b) => a);
可能有帮助的相关Question