private static void EnrichWithMissingFiles(BestMatchInfo bestMatchInfo, string outputDirPath) { var a = bestMatchInfo.MatchingFiles.First(); // NOTE: there are at least 2 files in the list (see previous note) for (var i = 1; i < bestMatchInfo.MatchingFiles.Count; i++) { var b = bestMatchInfo.MatchingFiles[i]; var nbMissingNumbers = b.Number - a.Number - 1; var missingNum = a.Number; while ((nbMissingNumbers--) > 0) { missingNum++; var missingNumStr = bestMatchInfo.RefNumberSeemsPadded ? missingNum.ToPaddedString(bestMatchInfo.RefNumberStr.Length) : missingNum.ToString(); var missingFileName = bestMatchInfo.Prefix + missingNumStr + bestMatchInfo.Suffix; var missingFilePath = Path.Combine(outputDirPath, missingFileName); var missingMatchingFile = new MatchingFile(new FileInfo(missingFilePath), missingNumStr, missingNum); bestMatchInfo.MatchingFiles.Insert(i++, missingMatchingFile); } a = b; } }
private List <MatchingFile> BuildSearchSummary() { // TODO: Deal with accuracy MatchingFile file = new MatchingFile() { accuracy = 0, fileInfo = new FileInfo(_searchFile), fileReader = new StreamReader(_searchFile, Encoding.Default), searchResults = _matches.GroupBy(m => m.Value).ToDictionary(g => g.Key, g => g.Select(m => m.Index)) }; return(new List <MatchingFile> { file }); }
public void RowConstructor_CreatesCorrectMatchingFile() { const string fileName = "plik.txt"; const string fullPath = "c:\\plik.txt"; const int sizeInBytes = 12345; var dataTable = new DataTable(); dataTable.Columns.Add("fileName", typeof(string)); dataTable.Columns.Add("fullPath", typeof(string)); dataTable.Columns.Add("sizeInBytes", typeof(long)); dataTable.Rows.Add(fileName, fullPath, sizeInBytes); var enumerator = dataTable.Rows.GetEnumerator(); enumerator.MoveNext(); var matchingFile = new MatchingFile((DataRow) enumerator.Current, new LinkedList<Match>()); Assert.AreEqual(fileName, matchingFile.FileName); Assert.AreEqual(fullPath, matchingFile.FullPath); Assert.AreEqual(sizeInBytes, matchingFile.SizeInBytes); }
public void RowConstructor_CreatesCorrectMatchingFile() { const string fileName = "plik.txt"; const string fullPath = "c:\\plik.txt"; const int sizeInBytes = 12345; var dataTable = new DataTable(); dataTable.Columns.Add("fileName", typeof(string)); dataTable.Columns.Add("fullPath", typeof(string)); dataTable.Columns.Add("sizeInBytes", typeof(long)); dataTable.Rows.Add(fileName, fullPath, sizeInBytes); var enumerator = dataTable.Rows.GetEnumerator(); enumerator.MoveNext(); var matchingFile = new MatchingFile((DataRow)enumerator.Current, new LinkedList <Match>()); Assert.AreEqual(fileName, matchingFile.FileName); Assert.AreEqual(fullPath, matchingFile.FullPath); Assert.AreEqual(sizeInBytes, matchingFile.SizeInBytes); }
private static List <MatchingFile> ListMatchingFiles(string prefix, string refNumber, string suffix, IEnumerable <FileInfo> allFiles, out bool refNumberSeemsPadded) { var regex = new Regex($"^{Regex.Escape(prefix)}(\\d+){Regex.Escape(suffix)}$"); var matchingFiles = new Dictionary <long, MatchingFile>(); refNumberSeemsPadded = refNumber.StartsWith("0"); foreach (var file in allFiles) { var match = regex.Match(file.Name); if (!match.Success) { continue; } var fileNumStr = match.Groups[1].Value; if (!long.TryParse(fileNumStr, out var fileNum)) { continue; } var matchingFile = new MatchingFile(file, fileNumStr, fileNum); if (!matchingFiles.ContainsKey(fileNum)) { matchingFiles.Add(fileNum, matchingFile); } else { // Here, a file with the same number is already found. // The strategy is here is to prefer a file with a padded number when reference number is padded // and a non padded number when reference number is not padded if (refNumberSeemsPadded) { if (matchingFile.NumberStr.Length == refNumber.Length) { matchingFiles[fileNum] = matchingFile; } } else { if (!matchingFile.NumberStr.StartsWith("0")) { matchingFiles[fileNum] = matchingFile; } } } } var files = matchingFiles.Values.ToList(); files.Sort((m1, m2) => { if (m1.Number == m2.Number) { return(0); } if (m1.Number < m2.Number) { return(-1); } return(1); }); return(files); }