#include "k_util.h" #define MAX_PRINTLINE_LENGTH 8000 #define MAX_PATH_LENGTH 250 #define ITK_err 919099 #define GUID_LEN 64 #include extern "C" int POM_AM__set_application_bypass(logical bypass); void set_bypass(logical bypass) { POM_AM__set_application_bypass(bypass); } int CreateTempFolder(string& dir_path) { char buf[GUID_LEN] = { 0 }; GUID guid; time_t t; struct tm* lt; time(&t);//获取Unix时间戳。 lt = localtime(&t);//转为时间结构。 sprintf(buf, "%d%d%d%d%d%d", lt->tm_year, lt->tm_mon + 1, lt->tm_mday, lt->tm_hour, lt->tm_min, lt->tm_sec); Log("3.18buf:%s", buf); /*CoCreateGuid(&guid); sprintf(buf, "%08X%04X%04x%02X%02X%02X%02X%02X%02X%02X%02X", guid.Data1, guid.Data2, guid.Data3, guid.Data4[0], guid.Data4[1], guid.Data4[2], guid.Data4[3], guid.Data4[4], guid.Data4[5], guid.Data4[6], guid.Data4[7]);*/ std::move(std::string(buf)); string uuidStr; uuidStr.assign(buf); //uuidStr.erase(std::remove(uuidStr.begin(), uuidStr.end(), '-'), uuidStr.end()); char logFileDir[MAX_PATH_LENGTH]; memset(logFileDir, 0, sizeof(logFileDir)); sprintf(logFileDir, "%s", getenv("TEMP")); strcat(logFileDir, "\\"); strcat(logFileDir, uuidStr.c_str()); struct stat info; if (stat(logFileDir, &info) != 0) { Log("创建临时目录: %s", logFileDir); mkdir(logFileDir); } if (stat(logFileDir, &info) != 0) { Log("创建临时目录失败"); return ITK_err; } dir_path.assign(logFileDir); return ITK_ok; } int CreateTempFolder1(string& dir_path) { char buf[GUID_LEN] = { 0 }; GUID guid; time_t t; struct tm* lt; time(&t);//获取Unix时间戳。 lt = localtime(&t);//转为时间结构。 sprintf(buf, "%d%d%d%d%d%d", lt->tm_year, lt->tm_mon + 1, lt->tm_mday, lt->tm_hour, lt->tm_min, lt->tm_sec); Log("3.18buf:%s", buf); //CoCreateGuid(&guid); /*sprintf(buf, "%08X%04X%04x%02X%02X%02X%02X%02X%02X%02X%02X", guid.Data1, guid.Data2, guid.Data3, guid.Data4[0], guid.Data4[1], guid.Data4[2], guid.Data4[3], guid.Data4[4], guid.Data4[5], guid.Data4[6], guid.Data4[7]);*/ std::move(std::string(buf)); string uuidStr; uuidStr.assign(buf); //uuidStr.erase(std::remove(uuidStr.begin(), uuidStr.end(), '-'), uuidStr.end()); char logFileDir[MAX_PATH_LENGTH]; memset(logFileDir, 0, sizeof(logFileDir)); sprintf(logFileDir, "%s", getenv("TEMP")); strcat(logFileDir, "\\"); strcat(logFileDir, uuidStr.c_str()); struct stat info; if (stat(logFileDir, &info) != 0) { Log("创建临时目录: %s", logFileDir); mkdir(logFileDir); } if (stat(logFileDir, &info) != 0) { Log("创建临时目录失败"); return ITK_err; } dir_path.assign(logFileDir); return ITK_ok; } char* U2G(const char* utf8) { int len = MultiByteToWideChar(CP_UTF8, 0, utf8, -1, NULL, 0); wchar_t* wstr = new wchar_t[len + 1]; memset(wstr, 0, len + 1); MultiByteToWideChar(CP_UTF8, 0, utf8, -1, wstr, len); len = WideCharToMultiByte(CP_ACP, 0, wstr, -1, NULL, 0, NULL, NULL); char* str = new char[len + 1]; memset(str, 0, len + 1); WideCharToMultiByte(CP_ACP, 0, wstr, -1, str, len, NULL, NULL); if (wstr) delete[] wstr; return str; } char* G2U(const char* gb2312) { int len = MultiByteToWideChar(CP_ACP, 0, gb2312, -1, NULL, 0); wchar_t* wstr = new wchar_t[len + 1]; memset(wstr, 0, len + 1); MultiByteToWideChar(CP_ACP, 0, gb2312, -1, wstr, len); len = WideCharToMultiByte(CP_UTF8, 0, wstr, -1, NULL, 0, NULL, NULL); char* str = new char[len + 1]; memset(str, 0, len + 1); WideCharToMultiByte(CP_UTF8, 0, wstr, -1, str, len, NULL, NULL); if (wstr) delete[] wstr; return str; } bool isClass(tag_t class_id, char* className) { tag_t* pclass_ids = NULL; char* class_name = NULL; int pclass_count = 0, ifail = ITK_ok; ITKCALL(POM_name_of_class(class_id, &class_name)); bool isType = false; if (strcmp(class_name, className) == 0) { isType = true; } DOFREE(class_name); if (isType) { return true; } ITKCALL(ifail = POM_superclasses_of_class(class_id, &pclass_count, &pclass_ids)); for (int i = 0; i < pclass_count; i++) { isType = isClass(pclass_ids[i], className); if (isType) { return true; } } return false; } int GetDatasets(tag_t target_tag, string dataset_rel, string dataset_type, vector& dataset_tags) { int ifail = ITK_ok, child_cnt = 0; tag_t* child_tags = NULL; char* object_type = NULL, * object_string = NULL;; ITKCALL(ifail = AOM_ask_value_tags(target_tag, dataset_rel.c_str(), &child_cnt, &child_tags)); if (ifail != ITK_ok) { return ifail; } for (int i = 0; i < child_cnt; i++) { DOFREE(object_string); DOFREE(object_type); tag_t child_tag = child_tags[i]; ITKCALL(ifail = AOM_ask_value_string(child_tag, "object_string", &object_string)); ITKCALL(ifail = WSOM_ask_object_type2(child_tag, &object_type)); Log(">> %d. %s [%s]", i + 1, object_string, object_type); //if (dataset_type._Equal(object_type)) { if (dataset_type == (object_type)) { dataset_tags.push_back(child_tag); } } DOFREE(object_string); DOFREE(object_type); DOFREE(child_tags); return ifail; } bool isType(tag_t item, const char* type) { int ifail = ITK_ok; tag_t item_type = NULLTAG, target_type = NULLTAG; logical answer = false; ITKCALL(ifail = TCTYPE_ask_object_type(item, &item_type)); if (ifail != ITK_ok) { return false; } ITKCALL(ifail = TCTYPE_ask_type(type, &target_type)); if (ifail != ITK_ok) { return false; } ITKCALL(ifail = TCTYPE_is_type_of(item_type, target_type, &answer)); if (ifail == ITK_ok) { return answer; } return false; } int WriteToFile(const char* file_path, const char* content) { ofstream file; file.open(file_path); file << content; file.close(); /*FILE *file = fopen(file_path, "a"); if (!file) { Log("打开文件失败:%s", file_path); return ITK_err; } Log("1"); fprintf(file, content); Log("2"); fflush(file); Log("3"); fclose(file); Log("4"); file = NULL;*/ return ITK_ok; } void Log(const char* format, ...) { va_list arg; char tmp[MAX_PRINTLINE_LENGTH]; time_t now; struct tm* p; memset(tmp, 0, sizeof(tmp)); va_start(arg, format); vsprintf(tmp, format, arg); va_end(arg); printf("%s\n", tmp); TC_write_syslog("%s\n", tmp); } void Splits(string strArg, string spliter, vector& ans) { ans.clear(); size_t index0 = 0; string one_arg; if (strArg.find_first_not_of(' ') == string::npos) strArg = ""; int len = spliter.size(); while (strArg.size() > 0) { index0 = strArg.find(spliter); if (index0 != string::npos) { one_arg = strArg.substr(0, index0); strArg = strArg.substr(index0 + len); ans.push_back(one_arg); if (strArg.size() == 0) { ans.push_back(strArg); } } else { ans.push_back(strArg); break; } } }