// GetFileNodes //------------------------------------------------------------------------------ bool Function::GetFileNodes( const BFFIterator & iter, const Array< AString > & files, const char * inputVarName, Dependencies & nodes ) const { const AString * const end = files.End(); for ( const AString * it = files.Begin(); it != end; ++it ) { const AString & file = *it; if (!GetFileNode( iter, file, inputVarName, nodes )) { return false; // GetFileNode will have emitted an error } } return true; }
HRESULT CPatch::GetFtpFiles(VOID) // 여기에서 File List를 분석해서 GetFile을 계속 돌려줄것 return -1l : Error 0: End 1: Continue { static int Pos=0; char szTemp[MAX_PATH]; char szDirStr[MAX_PATH]; char szFileName[MAX_PATH]; UnCompressedFileNode* FileNode; // 여기에서 Last Patch Date를 얻어야 한다. if(m_bEndPatch != TRUE) { if(m_PatchState == 3) { m_bEndPatch = TRUE; return 0l; } else { if((m_PatchState == 2) || (m_PatchState == 0)) { Pos ++; if(m_PatchState == 2) { if(m_hFile != NULL) { CloseHandle(m_hFile); m_hFile = NULL; } if(m_HFileFtp != NULL) { InternetCloseHandle(m_HFileFtp); m_HFileFtp=NULL; } if(Pos > m_FACount) { m_PatchState = 0; m_bPatched = TRUE; m_bEndPatch = TRUE; return 0l; } } FileNode = GetFileNode(Pos - 1); ZeroMemory(szFileName, MAX_PATH); ZeroMemory(szTemp, MAX_PATH); DWORD dwErrNum; ZeroMemory(szDirStr, MAX_PATH); if(strcmp(FileNode->szFileName, "Mir2Patch.exe") == 0) // Patch 화일 일 경우 { DeleteFile(FileNode->szFileName); if(!jRegGetKey(_T(DEFAULT_REG_PATH), _T("setup path"), (LPBYTE)szDirStr)) { ZeroMemory(szDirStr, MAX_PATH); GetCurrentDirectory(MAX_PATH, szDirStr); szDirStr[strlen(szDirStr)] ='\\'; szDirStr[strlen(szDirStr)] = NULL; } for ( INT nCnt = strlen(szDirStr); nCnt >= 0; nCnt--) { if ( szDirStr[nCnt] == '\\' ) { szDirStr[nCnt+1] = NULL; break; } } } else { strcpy(szDirStr, m_UpdatePath); } strcpy(szFileName, FileNode->szFileName); strcpy(szTemp, szDirStr); strcat(szTemp, szFileName); m_hFile = CreateFile (szTemp, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL); if((dwErrNum=GetLastError()) == ERROR_FILE_EXISTS) { // 화일이 이미 존재 할 경우 그 화일의 크기를 확인 // 업데이트 하려는 화일보다 작은 화일의 경우 // 재대로 업데이트 되지 않은 화일 이므로 다시 업데이트를 받는다. m_hFile = CreateFile (szTemp, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); DWORD High_FileSize; DWORD Low_FileSize; High_FileSize = 0; Low_FileSize = 0; Low_FileSize = GetFileSize(m_hFile, &High_FileSize); CloseHandle(m_hFile); m_hFile = NULL; if(Low_FileSize <= (DWORD)FileNode->lFileSize) { BOOL bResult = DeleteFile(szTemp); if (bResult) { // Success // MessageBox(NULL,"File Delete & ReCreate","Message",MB_OK); m_hFile = CreateFile (szTemp, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL); } else { // MessageBox(NULL,"File Delete Fail","Message",MB_OK); // Fail return -1l; } } } strcpy(szTemp, m_szPatchDate); strcat(szTemp, "\\"); strcat(szTemp, szFileName); m_HFileFtp = FtpOpenFile(m_HFtp, szTemp, GENERIC_READ, FTP_TRANSFER_TYPE_BINARY, 0); } else { FileNode = GetFileNode(Pos - 1); } strcpy(szTemp, m_szPatchDate); strcat(szTemp, "\\"); strcat(szTemp, szFileName); GetFile(szTemp); // 화일 계속 받기 ^^; } } else { // End Patch if(m_HFileFtp != NULL) { InternetCloseHandle(m_HFileFtp); m_HFileFtp = NULL; } m_bPatched = TRUE; return 0l; } return 1l; }