Node* CCBReader::readNodeGraphFromFile(const char *pCCBFileName, Ref *pOwner, const Size &parentSize) { if (nullptr == pCCBFileName || strlen(pCCBFileName) == 0) { return nullptr; } std::string strCCBFileName(pCCBFileName); std::string strSuffix(".ccbi"); // Add ccbi suffix if (!CCBReader::endsWith(strCCBFileName.c_str(), strSuffix.c_str())) { strCCBFileName += strSuffix; } auto fileUtils = FileUtils::getInstance(); std::string strPath = fileUtils->fullPathForFilename(strCCBFileName); if (strPath.empty()) { return nullptr; } auto dataPtr = std::make_shared<Data>(fileUtils->getDataFromFile(strPath)); if (dataPtr->isNull()) { return nullptr; } Node *ret = this->readNodeGraphFromData(dataPtr, pOwner, parentSize); return ret; }
//获取文件列表 bool AnalyseClassCallRelation::GetFileList(vector<ClassSource> &vFileList) { HANDLE file; WIN32_FIND_DATA fileData; // wchar_t fn[1000]; char szFilename[1024]; // mbstowcs(fn, m_strProjectPath.c_str() ,999); string strFind = m_strProjectPath + string("\\*.*"); file = FindFirstFile(strFind.c_str(), &fileData); ClassSource clsClassSource; clsClassSource.Init(); //找到文件返回0 否则返回-1 while(FindNextFile(file, &fileData)) { // 只对普通文件做处理 if (!(fileData.dwFileAttributes & FILE_ATTRIBUTE_ARCHIVE)) { continue; } sprintf(szFilename, "%s", fileData.cFileName); //判读是头文件 还是源文件 判断名称是否存在 //获取后缀 char *pTemp = szFilename + strlen(szFilename); while( pTemp > szFilename && *pTemp-- != '.') ; if (pTemp == szFilename) { continue; } ++ pTemp ; string strSuffix(pTemp); if (strSuffix == ".cpp") { clsClassSource.byHasImplementation = 1; } else if(strSuffix == ".h" || strSuffix == ".hpp") { clsClassSource.byHasHeader = 1; } else continue; string strFile(szFilename, pTemp-szFilename); clsClassSource.strName = strFile; vector<ClassSource>::iterator iter = vFileList.begin(); while (iter != vFileList.end() ) { if (iter->strName == strFile) { iter->byHasHeader = clsClassSource.byHasHeader?1:iter->byHasHeader; iter->byHasImplementation = clsClassSource.byHasImplementation?1:iter->byHasImplementation; break;; } ++ iter; } if (iter == vFileList.end() ) { vFileList.push_back(clsClassSource); clsClassSource.Init(); } } return true; }