I have a strange problem when scanning a file. In the code below I am looking for cells with name beginning with characters "XX". It finds all the cells which start with characters "XX" except cell: XXDWG. Now if I comment out the 3 lines above the line mdlScanCriteria_setElementTypeTest(scP, NULL, sizeof(typeMask)); and uncomment that line it works! I don't understand why that piece of code wont find XXDWG but find other similar cells like XXMAIN, XXTIT1, XXSHT, etc. I have tried compressing the file but it does not help.
scP = mdlScanCriteria_create(); status = mdlScanCriteria_setReturnType (scP, MSSCANCRIT_RETURN_FILEPOS, FALSE, TRUE); memset(typeMask, 0, sizeof(typeMask)); typeMask[0] = TMSK0_CELL_HEADER; typeMask[4] = TMSK4_MICROSTATION_ELM; mdlScanCriteria_setElementTypeTest (scP, typeMask, sizeof(typeMask)); //mdlScanCriteria_setElementTypeTest(scP, NULL, sizeof(typeMask)); eofPos = mdlElement_getFilePos ( FILEPOS_EOF, NULL); modelRef = mdlModelRef_getActive(); mdlScanCriteria_setModel (scP, MASTERFILE); filePos = 0L; actualPos = 0L; do { scanWords = sizeof (elemAddr) / sizeof (short); status = mdlScanCriteria_scan ( scP, elemAddr, &scanWords, &filePos); numAddr = scanWords/sizeof (short); for ( i = 0 ; i < numAddr; i++) { if (elemAddr [i] >= eofPos) break; if (elemAddr [i] < actualPos) continue; mdlElmdscr_read ( &cellDP, elemAddr [i], ACTIVE_FILE, FALSE, &actualPos); if (cellDP->el.ehdr.type == CELL_HEADER_ELM) { mdlCell_extract ( NULL, NULL, NULL, NULL, cellname, MAX_CELLNAME_LENGTH, &cellDP->el); if (cellname [0] == L'X' && cellname [1] == L'X') { replace = 0; status = mdlElmdscr_operation ( cellDP, (PFElemOperation )putTitleInfo, &dummy, ELMD_ELEMENT | ELMD_PRE_HDR | ELMD_PRE_NESTEDHDR); if (replace) status = mdlElmdscr_rewrite ( cellDP, NULL, actualPos); } } mdlElmdscr_freeAll (&cellDP); } } while (status == BUFF_FULL); return SUCCESS;
XXXX084.001.DGN
RELATED POST: C++ File Scanning issue [RESOLVED]
Answer Verified By: Dilip Bhandarkar