示例#1
0
        private async void ScanToolStripMenuItem_Click(object sender, EventArgs e)
        {
            foreach (var file in Directory.EnumerateFiles(_appSettings.FolderPath, "*.*", SearchOption.AllDirectories))
            {
                _log.Info($"Select file: {file}");
                string hash;
                using (var md5 = MD5.Create())
                {
                    using (var stream = File.OpenRead(file))
                    {
                        hash = BitConverter.ToString(md5.ComputeHash(stream))
                               .Replace("-", "")
                               .ToLowerInvariant();
                    }
                }

                _log.Info($"Hash of {file}: {hash}");
                if (_storage.IsExists(hash))
                {
                    _log.Info($"Файл {file} уже обработан");
                    continue;
                }

                try
                {
                    var parser = ParserSelector.Select(file);
                    await Task.Run(() => parser.Load());

                    foreach (var node in parser.Data)
                    {
                        _log.Debug($"Parsing current row: {node.Name}, {node.Sum}");
                        _taskQueue.Enqueue(() => ExecuteTask(node.Name, string.Empty, node.Sum, file));
                    }

                    if (!tmrQueue.Enabled)
                    {
                        tmrQueue.Start();
                    }

                    _storage.AddNode(hash);
                }
                catch
                {
                    Log.Error($"Не удалось открыть файл: {_filePath}");
                }
            }
        }
示例#2
0
        private async void ScanToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (!Directory.Exists(_appSettings.FolderPath))
            {
                _log.Error($"Папка {_appSettings.FolderPath} не найдена");
                return;
            }

            LogManager.ReconfigExistingLoggers();

            foreach (var file in Directory.EnumerateFiles(_appSettings.FolderPath, "*.*", SearchOption.AllDirectories))
            {
                _log.Info($"Select file: {file}");

                if (!File.Exists(file))
                {
                    _log.Error($"Файд {file} не найден");
                    continue;
                }

                string hash;
                using (var md5 = MD5.Create())
                {
                    using (var stream = File.OpenRead(file))
                    {
                        hash = BitConverter.ToString(md5.ComputeHash(stream))
                               .Replace("-", "")
                               .ToLowerInvariant();
                    }
                }

                _log.Info($"Hash of {file}: {hash}");
                if (_storage.IsExists(hash))
                {
                    _log.Info($"Файл {file} уже обработан");
                    continue;
                }

                try
                {
                    var parser = ParserSelector.Select(file);
                    await Task.Run(() => parser.Load());

                    var tokenSource = new CancellationTokenSource();
                    foreach (var node in parser.Data)
                    {
                        _log.Debug($"Parsing current row: {node.Name}, {node.Sum}");
                        _taskQueue.Enqueue(() =>
                                           ExecuteTask(node.Name, string.Empty, node.Sum, file, node.Source, tokenSource));
                    }

                    if (!tmrQueue.Enabled)
                    {
                        tmrQueue.Start();
                    }

                    _storage.AddNode(hash);
                }
                catch
                {
                    _log.Error($"Не удалось открыть файл: {file}");
                }
            }

            var target = (FileTarget)LogManager.Configuration.FindTargetByName("errfile_parsed");

            target.Flush(exception => { });
            target.Dispose();
        }