// FindCharCopyLog.cpp : ÄÜ¼Ö ÀÀ¿ë ÇÁ·Î±×·¥¿¡ ´ëÇÑ ÁøÀÔÁ¡À» Á¤ÀÇÇÕ´Ï´Ù. // #include "stdafx.h" #pragma warning(disable:4800) #include #include #include #include #include #include #include void PrintUsage() { printf("Usage : FindCharCopyLog ServerGroupNum(0~9) filename(can use wildcard * or ? ) "); } struct CopyCharData { unsigned long m_dwUID; // UID unsigned long m_dwCID; // CID time_t m_nCopyTime; // º¹»ç ½ÅûÇÑ ½Ã°£ unsigned long m_dwIndex; // ½Ã°£ÀÌ °°Àº °æ¿ì¿¡, À̰мø¼­´ë·Î ºñ±³. }; struct SortByTime { bool operator () (const CopyCharData& lhs, const CopyCharData& rhs) { return lhs.m_nCopyTime < rhs.m_nCopyTime || (!(rhs.m_nCopyTime < lhs.m_nCopyTime) && lhs.m_dwIndex, rhs.m_dwIndex); } }; typedef std::set > CopyCharUIDDataSet; int _tmain(int argc, _TCHAR* argv[]) { if(3 != argc) { PrintUsage(); return -1; } int nServerGroup = atoi(argv[1]); WIN32_FIND_DATA findData; memset(&findData, 0, sizeof(WIN32_FIND_DATA)); HANDLE hSearch = FindFirstFile(argv[2], &findData); if (hSearch == INVALID_HANDLE_VALUE) { printf("File not found\n"); return -1; } CopyCharUIDDataSet copyCharUIDDataSet; tm localTm; memset(&localTm, 0, sizeof(tm)); unsigned long dwUID = 0; unsigned long dwCID = 0; const int MAX_BUFFER = 4096; char szReadBuffer[MAX_BUFFER]; CopyCharData copyTempCharData; do { std::fstream inputFile(findData.cFileName, std::ios_base::in); if(!inputFile.is_open()) { printf("File open failed : %s", findData.cFileName); } else { unsigned long dwLineCount = 0; while(inputFile.getline(szReadBuffer, MAX_BUFFER - 1)) { szReadBuffer[MAX_BUFFER - 1] = 0; if(0 != strstr(szReadBuffer, "[Copy Log]") && 8 == sscanf(szReadBuffer, "[Ty-DET][Tm-%d-%d-%d %d:%d:%d][Ex-UID:%d/CID:%d/", &localTm.tm_year, &localTm.tm_mon, &localTm.tm_mday, &localTm.tm_hour, &localTm.tm_min, &localTm.tm_sec, &dwUID, &dwCID)) { // °ªÀÌ ÀüºÎ Á¦´ë·Î µé¾î ¿ÔÀ¸¸é µ¥ÀÌÅ͸¦ ¸Ê¿¡ ³Ö´Â´Ù. localTm.tm_year -= 1900; localTm.tm_mon -= 1; copyTempCharData.m_dwUID = dwUID; copyTempCharData.m_dwCID = dwCID; copyTempCharData.m_nCopyTime = mktime(&localTm); copyTempCharData.m_dwIndex = ++dwLineCount; copyCharUIDDataSet.insert(copyTempCharData); } } } } while(FindNextFile(hSearch, &findData)); FindClose(hSearch); // ½Ã°£¼øÀ¸·Î ¼ÒÆ®ÇØ¼­, ÀÏ´Ü ÀüºÎ »Ì¾Æ³½ µÚ, ³ªÁß¿¡ Áߺ¹Ã¼Å©, Á¾Á·Ã¼Å© µîÀ» ÇÑ´Ù. std::stringstream outFileName; outFileName << "./CharCopy" << std::setfill('0') << std::setw(2) << nServerGroup << ".log" << std::ends; std::fstream outstream(outFileName.str().c_str(), std::ios_base::out); if(outstream.is_open()) { CopyCharUIDDataSet::iterator pos = copyCharUIDDataSet.begin(); CopyCharUIDDataSet::iterator end = copyCharUIDDataSet.end(); for(; pos != end; ++pos) { CopyCharData& copyCharData = *pos; outstream << copyCharData.m_dwUID << ":" << copyCharData.m_dwCID << ":" << copyCharData.m_nCopyTime << ":" << copyCharData.m_dwIndex << std::endl; } } return 0; }