Exemplo n.º 1
0
        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;
            }
        }
Exemplo n.º 2
0
        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
            });
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        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);
        }