Merci d'avance pour toute assistance. Je ne suis même pas sûr si c'est possible, mais j'essaie d'obtenir une liste de fichiers en double utilisant leurs hashes pour identifier la liste des fichiers associés aux hachages.Dictionnaire de retour <FileHash, string []> de Linq Query
J'ai ce ci-dessous:
Dictionary<FileHash, string[]> FindDuplicateFiles(string searchFolder)
{
Directory.GetFiles(searchFolder, "*.*")
.Select(
f => new
{
FileName = f,
FileHash = Encoding.UTF8.GetString(new SHA1Managed()
.ComputeHash(new FileStream(f,
FileMode.
OpenOrCreate,
FileAccess.Read)))
})
.GroupBy(f => f.FileHash)
.Select(g => new
{
FileHash = g.Key,
Files = g.Select(z => z.FileName).ToList()
})
.GroupBy(f => f.FileHash)
.Select(g => new {FileHash = g.Key, Files = g.Select(z => z.Files).ToArray()});
Il compile très bien, mais je suis juste curieux de savoir s'il y a même un moyen de manipuler les résultats pour renvoyer un dictionnaire.
Toutes les suggestions, alternatives, critiques seraient grandement appréciées.
Vous devez utiliser EnumerateFiles au lieu de GetFiles si vous avez changé à C# 4 déjà. –
Ces dernières lignes sont des doublons, est-ce exprès? Mieux éditer. –
Notez que vous ne pouvez pas décoder une séquence d'octets aléatoire (comme un hachage SHA-1) en une chaîne. ** Toutes les séquences d'octets ne sont pas valides UTF-8! ** – dtb