static void Scan(string dir, string dbName) { //Открыть папку, выбрать все файлы двг из нее string dataDir = @"c:\Data\"; string[] dwgFiles = Directory.GetFiles(dir, "*.dwg", SearchOption.AllDirectories); DbMongo db = new DbMongo(dbName); foreach (string dwgFile in dwgFiles) { CrawlDocument cDoc = new CrawlDocument(dwgFile); FileCopy(dwgFile, Path.Combine(dataDir, cDoc.FileId + ".dwg")); db.InsertIntoFiles(cDoc); } /* * //Запуситить процессы по числу ядер процессоров каждый на своем ядре * int numCores = 4; * for (int i = 0; i < numCores; i++) * { * //crawlinNano(); * //http://cplus.about.com/od/learnc/a/multi-threading-using-task-parallel-library.htm * Task.Factory.StartNew(() => crawlinNano()); * //Процесс выбирает из базы случайным образом непросканированный файл и сканирует его в Json * //Это пока выполняется вручным запуском нанокадов * //Если файл изменился, то записывается его новый hash * } */ }
public void TestInsertIntoFiles() { db.Clear(); string json1 = @" { 'ClassName': 'File', 'FileId': 'bc6a1669-51ce-444c-94c6-cfec71c0f44d', 'Hash': 'd520b80512f226e81dd72294037657fd', 'Path': '\\\\FILESERVER\\home\\#АРХИВ 2014\\Объекты\\МНОГОТОПЛИВНАЯ АЗС №15\\задание на фундаменты.dwg', 'Scanned': false, '_id': { '$oid': '55a49dfff80dc7180c8228d3' } }"; string json2 = @" { 'ClassName': 'File', 'FileId': '9e2769ff-678f-401b-8d10-e0581aa6bf98', 'Hash': '253ffb6063333c5bfc1109c5d7db1945', 'Path': '\\\\FILESERVER\\home\\#АРХИВ 2014\\Объекты\\МНОГОТОПЛИВНАЯ АЗС №15\\образец исх данные.dwg', 'Scanned': false, '_id': { '$oid': '55a49dfff80dc7180c8228d4' } } "; db.InsertIntoFiles(json1); db.InsertIntoFiles(json2); Assert.IsTrue(db.HasFileHash("d520b80512f226e81dd72294037657fd")); Assert.IsTrue(db.HasFileId("bc6a1669-51ce-444c-94c6-cfec71c0f44d")); Assert.IsTrue(db.HasFileHash("253ffb6063333c5bfc1109c5d7db1945")); Assert.IsTrue(db.HasFileId("9e2769ff-678f-401b-8d10-e0581aa6bf98")); db.Clear(); Crawl.CrawlDocument cdoc = new CrawlDocument(@"D:\Documents\Desktop\SingleFile\+b3826065-07d1-4d4a-8af4-35ebc3630117.dwg"); db.InsertIntoFiles(cdoc); Assert.IsTrue(db.HasFileHash(cdoc.Hash)); Assert.IsTrue(db.HasFileId(cdoc.FileId)); }
public void ScanDocument() { //Если документ неправильно зачитался то выходим if (this.teighaDocument == null) { return; } using (Transaction tr = this.teighaDocument.TransactionManager.StartTransaction()) { PromptSelectionResult r = this.teighaDocument.Editor.SelectAll(); //Пробегаем по всем объектам в чертеже foreach (SelectedObject obj in r.Value) { string objId = obj.ObjectId.ToString(); string objectJson = jsonGetObjectData(obj.ObjectId); string objectClass = obj.ObjectId.ObjectClass.Name; if (!string.IsNullOrEmpty(objectJson)) { this.sqlDB.SaveObjectData(objectJson, this.FileId); } } //Пробегаем все определения блоков List <ObjectId> blocks = GetBlocks(this.teighaDocument); foreach (ObjectId btrId in blocks) { BlockTableRecord btr = (BlockTableRecord)btrId.GetObject(OpenMode.ForRead); DocumentFromBlockOrProxy(btrId, this.FileId); } //Пробегаем все определения слоев //http://forums.autodesk.com/t5/net/how-to-get-all-names-of-layers-in-a-drawing-by-traversal-layers/td-p/3371751 LayerTable lt = (LayerTable)this.teighaDocument.Database.LayerTableId.GetObject(OpenMode.ForRead); foreach (ObjectId ltr in lt) { string objId = ltr.ToString(); string objectClass = ltr.ObjectClass.Name; LayerTableRecord layerTblRec = (LayerTableRecord)ltr.GetObject(OpenMode.ForRead); crawlAcDbLayerTableRecord cltr = new crawlAcDbLayerTableRecord(layerTblRec); string objectJson = jsonHelper.To <crawlAcDbLayerTableRecord>(cltr); this.sqlDB.SaveObjectData(objectJson, this.FileId); } //Пробегаем внешние ссылки List <CrawlDocument> xrefs = GetXrefs(this.teighaDocument); foreach (CrawlDocument theXref in xrefs) { crawlAcDbDocument cDoc = new crawlAcDbDocument(theXref); sqlDB.InsertIntoFiles(theXref); cDoc.sqlDB = sqlDB; cDoc.ScanDocument(); } } this.teighaDocument.CloseAndDiscard(); sqlDB.SetDocumentScanned(this.FileId); }