Feedback

C# - doppelte dateien in ordner finden

Veröffentlicht von am 22.11.2015
(0 Bewertungen)
Mit den beiden funktionen kann man einen ordner rekursiv nach identischen dateien durchsuchen. Die rückgabe ist eine liste der gleichen paare.

foreach (var pair in FindDoubles(new DirectoryInfo(@"c:\ein\ordner")))
{
Console.WriteLine($"{pair.Item1.Name} == {pair.Item2.Name}");
}
GFU-Schulungen  [Anzeige]

XML und .NET Überblick

Um auf dem neuesten Wissensstand zu sein, sollten Sie unser aktuelles ASP .NET Komplett Seminar belegen.
Nach dem Seminar kennen Sie die wichtigsten Strömungen in der Software-Technologie

VB.NET 2017/2015/2013 Einführung

Das Seminar befähigt Sie zur eigenständigen Entwicklung von anwenderorientierten Programmen in VB.NET, worin auch der Einsatz von Datenbanken enthalten ist.

using System.IO;
using System.Security.Cryptography;

private void TraverseDirectory(DirectoryInfo directory, List<Tuple<FileInfo, FileInfo>> doubles, Dictionary<string, FileInfo> hashes)
{
	using (var md5 = MD5.Create())
	{
		foreach (var file in directory.GetFiles())
		{
			using (var stream = file.OpenRead())
			{
				var hash = BitConverter.ToString(md5.ComputeHash(stream));
				FileInfo alreadyFound;
				if (hashes.TryGetValue(hash, out alreadyFound))
				{
					doubles.Add(Tuple.Create(alreadyFound, file));
				}
				else
				{
					hashes.Add(hash, file);
				}
			}
		}
	}
			
	foreach (var sub in directory.GetDirectories())
	{
		TraverseDirectory(sub, doubles, hashes);
	}
}

public List<Tuple<FileInfo, FileInfo>> FindDoubles(DirectoryInfo directory)
{
	if (directory == null)
	{
		throw new ArgumentNullException();
	}
	if (!directory.Exists)
	{
		throw new FileNotFoundException();
	}

	var doubles = new List<Tuple<FileInfo, FileInfo>>();
	var hashes = new Dictionary<string, FileInfo>();

	TraverseDirectory(directory, doubles, hashes);

	return doubles;
}
Abgelegt unter directory, double, md5.

Kommentare zum Snippet

 

Logge dich ein, um hier zu kommentieren!