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]

Visual Studio Team Foundation Server 2017/2015 (TFS) für Administratoren - Kompakt

Nach dieser Schulung beherrschen Sie die Grundlagen des TFS. Sie erledigen administrative Aufgaben schnell und sicher.

C# Komplett

Sie kennen sich in objektorientierter Programmierung aus. Sie schreiben C++ oder Java? Und nun stehen Sie vor der Aufgabe, in C# Anwendungen zu erstellen. Das C# Komplett-Seminar verschafft Ihnen umfassende Programmierkenntnisse in dieser Sprache. Nach der Schulung entwickeln Sie selbständig Anwendungen mit C#. Sie kennen die Datentypen und Klassenbibliotheken der objektorientierten Programmiersprache C#. Der Komplettkurs setzt bei den Grundlagen von C# ein. Sie arbeiten mit Variablen und konvertieren Typen. Multithreading, Delegates, Generics sind nach dem Seminar für Sie kein Geheimnis mehr.

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!