/// <summary> /// Обработка файла по указанному пути. /// </summary> /// <param name="filePath">Путь к файлу.</param> /// <returns></returns> private static async Task MakeWork2Async(string filePath) { //Проверяем состояние сервера MongoDb. if (await DataBase.GetInstance().CheckMongoConnection()) { //Инкрементируем к-ство выполняемых потоков. ++_threadCount; if (!await DataBase.GetInstance().IsFileInDbAsync(FileActions.FileHash(filePath))) { var canonedTokens = DocumentActions.GetWordCanonedTokens(filePath); DocumentActions.Cyrillify(ref canonedTokens); var extension = Path.GetExtension(filePath); //эта переменная будет использоваться для занесения в базу пути файла и ее производных var newFilePath = filePath; //поскольку формат *.doc пересохраняется в *.docx после вызова метода GetWordCanonedTokens, //то при вставке документа в БД используется новый формат *.docx if (extension != null && extension.Equals(".doc")) { newFilePath += "x"; } newFilePath = FileActions.FileMoveOrDelete(newFilePath, FileActionType.RenameAndMove); var fileName = Path.GetFileNameWithoutExtension(filePath); //Здесь будут хранится данные из имени файла. string[] fileNameData; try { fileNameData = DocumentActions.SplitFileName(fileName); } catch (FileNameFormatException ex) { LogViewModel.AddNewLog(ex.Message + " " + fileName, DateTime.Now, LogType.Information); fileNameData = new[] { "Undefined", //ФИО-автора "Undefined", //Группа автора fileName //Название работы }; } //создаем новый документ <Document> для вставки в коллекцию var insertDoc = new Document( fileNameData[2], //Здесь хранится имя документа fileNameData[0], //Здесь хранится ФИО автора документа fileNameData[1], //Здесь хранится группа автора документа newFilePath, Path.GetExtension(newFilePath), FileActions.FileHash(newFilePath), canonedTokens.ToArray(), DocumentActions.MakeTfVector(canonedTokens), File.GetLastWriteTime(newFilePath)); //вставляем в БД await DataBase.GetInstance().InsertDocumentAsync(insertDoc); } else { var fileName = Path.GetFileNameWithoutExtension(filePath); LogViewModel.AddNewLog("Файл " + fileName + " уже есть в базе данных!", DateTime.Now, LogType.Information); FileActions.FileMoveOrDelete(filePath, FileActionType.MoveDuplicate); } --_threadCount; } else { StopProgramm(true); } }