以下是一个比较两个目录的C#代码示例:
using System;
using System.IO;
class Program
{
static void Main(string[] args)
{
string directory1 = "path/to/directory1";
string directory2 = "path/to/directory2";
CompareDirectories(directory1, directory2);
Console.WriteLine("Press any key to exit.");
Console.ReadKey();
}
static void CompareDirectories(string directory1, string directory2)
{
DirectoryInfo dir1 = new DirectoryInfo(directory1);
DirectoryInfo dir2 = new DirectoryInfo(directory2);
Console.WriteLine($"Comparing {dir1.FullName} and {dir2.FullName}");
DirectoryInfo[] dir1SubDirs = dir1.GetDirectories();
DirectoryInfo[] dir2SubDirs = dir2.GetDirectories();
FileInfo[] dir1Files = dir1.GetFiles();
FileInfo[] dir2Files = dir2.GetFiles();
foreach (FileInfo file in dir1Files)
{
FileInfo correspondingFile = Array.Find(dir2Files, f => f.Name == file.Name);
if (correspondingFile != null)
{
if (FileEquals(file, correspondingFile))
{
Console.WriteLine($"{file.Name} is identical in both directories");
}
else
{
Console.WriteLine($"{file.Name} is different in both directories");
}
}
else
{
Console.WriteLine($"{file.Name} exists in {dir1.FullName} but not in {dir2.FullName}");
}
}
foreach (FileInfo file in dir2Files)
{
FileInfo correspondingFile = Array.Find(dir1Files, f => f.Name == file.Name);
if (correspondingFile == null)
{
Console.WriteLine($"{file.Name} exists in {dir2.FullName} but not in {dir1.FullName}");
}
}
foreach (DirectoryInfo subDir in dir1SubDirs)
{
DirectoryInfo correspondingSubDir = Array.Find(dir2SubDirs, d => d.Name == subDir.Name);
if (correspondingSubDir != null)
{
CompareDirectories(subDir.FullName, correspondingSubDir.FullName);
}
else
{
Console.WriteLine($"{subDir.Name} exists in {dir1.FullName} but not in {dir2.FullName}");
}
}
foreach (DirectoryInfo subDir in dir2SubDirs)
{
DirectoryInfo correspondingSubDir = Array.Find(dir1SubDirs, d => d.Name == subDir.Name);
if (correspondingSubDir == null)
{
Console.WriteLine($"{subDir.Name} exists in {dir2.FullName} but not in {dir1.FullName}");
}
}
}
static bool FileEquals(FileInfo file1, FileInfo file2)
{
if (file1.Length != file2.Length)
return false;
using (FileStream fs1 = file1.OpenRead())
using (FileStream fs2 = file2.OpenRead())
{
int byte1 = 0;
int byte2 = 0;
do
{
byte1 = fs1.ReadByte();
byte2 = fs2.ReadByte();
if (byte1 != byte2)
return false;
} while (byte1 >= 0 && byte2 >= 0);
}
return true;
}
}
这段代码通过递归地比较两个目录及其子目录中的文件。它首先获取两个目录中的文件和子目录列表,然后逐个比较它们。如果两个目录中的文件具有相同的名称,它会比较它们的内容以确定它们是否相同。如果两个目录中存在不同的文件,则输出它们的差异。如果一个文件只存在于一个目录中,则输出该信息。同样,它也会处理子目录,并在需要时递归调用自身来比较子目录。
请注意,代码中使用的路径示例是伪代码,请根据实际情况将其替换为真实的目录路径。