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]

ASP.NET Core - Der Einstieg

In nur 3 Tagen lernen Sie, wie man mit ASP.NET Core und den Technologien MVC, Entity Framework, WebAPI und Razor professionelle Web-Anwendungs-Architekturen aufbaut. Diese Schulung ist der perfekte Einstieg, um datengetriebene und präsentations-orientierte Applikationen auf Basis der ASP.NET Core Plattform zu erstellen.

C# 2017/2015/2013 Aufbau

In dieser Schulung lernen Sie fortgeschrittene Techniken im Bereich .Net C#. Dabei stehen neben den eigentlichen Techniken auch architektonische Aspekte im Mittelpunkt.

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!