⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ftpupdate.cpp

📁 奇迹世界更新程序源代码,其中包括一些文档
💻 CPP
📖 第 1 页 / 共 2 页
字号:

	//绊积沁促... --+++
	//FtpFindFirstFile 捞 窃荐绰 (滴锅掳 牢磊俊 公均阑 持电..) 公炼扒 泅犁 技泼等 叼泛配府狼 力老霉锅掳 颇老(肚绰 叼泛配府)
	//捞抚阑 啊瘤绊 柯促. 霉锅掳 颇老(叼泛配府) 沥焊绰 wfd俊 历厘等促.
	//颇老捞 绝栏搁 NULL 捞 府畔等促.
	HINTERNET hFind = ::FtpFindFirstFile(m_hFTP_CONNECTION, "*.*", &wfd, 0, 0);

	if( hFind == NULL )
	{
		INT iErrno = GetLastError();
		if (iErrno != ERROR_INTERNET_EXTENDED_ERROR)
		{
			SetLastErrorMsg(CWZUpdateModule::ERROR_SYSTEM, iErrno);
			return -1;  //勤甸俊 巩力啊 乐绰 版快捞促.
		}
	}
	else
	{
		BOOL bRet = FALSE;

		do
		{
			// 盔拜瘤狼 颇老捞抚苞, 泅犁 茫篮 颇老捞抚捞 鞍促搁...
			if( strcmp(wfd.cFileName, pszRemoteFile) == 0 )
			{
				dwFileLength = wfd.nFileSizeLow;
				fileTime = wfd.ftLastWriteTime;
				bRet = TRUE;
				break;
			}

		}while(	bRet = InternetFindNextFile( hFind, &wfd ) );

		if(bRet == FALSE)  //颇老阑 茫瘤 给茄版快
		{
			if( ERROR_NO_MORE_FILES == GetLastError() )
			{
				TCHAR szMsg[128];
				_snprintf( szMsg, 128, "%s 颇老捞 绝嚼聪促.", pszRemoteFile );
				MessageBox( NULL, szMsg, NULL, MB_OK );
			}

			return FALSE;
		}
		else  // 颇老篮 茫疽绰单.. 
		{
			if( wfd.dwFileAttributes != FILE_ATTRIBUTE_NORMAL )
			{
				char szError[128];
				wsprintf(szError, "滚傈沥焊 颇老阑 佬阑荐 绝嚼聪促. 颇老 加己 = %d", wfd.dwFileAttributes );
				MessageBox( NULL, szError, NULL, MB_OK );
				InternetCloseHandle(hFind);
				return FALSE;
			}
		}

		InternetCloseHandle(hFind);
	}

	return TRUE;
}


WZ_DECLAREDLL HINTERNET CWZFtpUpdateModule::OpenRemoteFile(const char* pszRemoteFile)
{
	HINTERNET hRemoteFile;

	INT iCount = MAX_RETRY_DOWNLOADING;

	while(iCount--)
	{
		hRemoteFile = ::FtpOpenFile(m_hFTP_CONNECTION, pszRemoteFile, GENERIC_READ, FTP_TRANSFER_TYPE_BINARY |
			INTERNET_FLAG_RELOAD | INTERNET_FLAG_DONT_CACHE, 0);//(DWORD)this);

		if( hRemoteFile == NULL ) 
		{
			// 俊矾
			m_strtUpdatingFileInfo.iErrorCode = GetLastError();
			Sleep(100);
		}
		else 
		{
			break;
		}
	}

	if( iCount  < 1 )
	{
		// 颇老阑 茫阑荐 绝促.
		AddEvent( EVENT_FILE_NOTFOUND );
		return NULL;
	}

	return hRemoteFile;
}

//盔拜瘤俊 乐绰 颇老阑 啊廉柯促.(促款肺靛 茄促.)
WZ_DECLAREDLL eRESULT_CONSTANT CWZFtpUpdateModule::GetRemoteFile(const HINTERNET hRemoteFile, const HANDLE hLocalFile, DWORD dwFileLength)
{
	DWORD dwNowRecvBytes, dwNowWrittenBytes, dwTotalWrittenBytes;
	dwNowRecvBytes = dwNowWrittenBytes = dwTotalWrittenBytes = 0;

	m_strtUpdatingFileInfo.uWholeFileSize = dwFileLength;
	m_strtUpdatingFileInfo.uNowFileSize = 0;

	int nZeroCount = 0;

	if(dwFileLength > 0)		
	{
		while(TRUE)
		{
			if ( !InternetReadFile(hRemoteFile, m_FTP_cBUFFER, sizeof(m_FTP_cBUFFER), &dwNowRecvBytes) )
			{
				SetLastErrorMsg(CWZUpdateModule::ERROR_SYSTEM, GetLastError());
				MessageBox (HWND_DESKTOP, "InternetReadFile() error", "俊矾俊矾", MB_OK);
				ZeroMemory( m_FTP_cBUFFER, MAX_BUFFER );
				return RESULT_DOWNLOAD_FAIL;
			}

			if( dwNowRecvBytes == 0)
				nZeroCount++;

			if( nZeroCount >= 2)
			{
				AddEvent( EVENT_FILEDOWNLOAD_FAIL );
				return RESULT_DOWNLOAD_FAIL;
			}

			// 父老 捞 风凭阑 角青窍绰 档吝俊 FTP辑滚客 楷搬捞 谗绢瘤搁, 历 窃荐俊辑 FALSE甫 府畔窍绰 巴捞 
			// 酒聪扼, dwNowRecvBytes啊 0捞 府畔等促. 弊贰档, 俊矾啊 酒匆荐档 乐栏骨肺, 2锅 0捞 唱坷搁,
			// 风凭阑 狐廉 唱坷绰 巴栏肺 茄促.

			if ( !WriteFile (hLocalFile, m_FTP_cBUFFER, dwNowRecvBytes, &dwNowWrittenBytes, NULL) )
			{
				SetLastErrorMsg(CWZUpdateModule::ERROR_SYSTEM, GetLastError());
				MessageBox (HWND_DESKTOP, "WriteFile() error", "俊矾俊矾", MB_OK);
				return RESULT_DOWNLOAD_FAIL;
			}

			dwTotalWrittenBytes += dwNowWrittenBytes;
			m_strtUpdatingFileInfo.uNowFileSize = dwTotalWrittenBytes;

			AddEvent( EVENT_FILEDOWNLOAD_WORKING );

			// 泅犁鳖瘤 静咯柳 颇老狼 侩樊捞 傈眉 颇老狼 侩樊焊促 鞍芭唱 农促搁...
			if ( dwTotalWrittenBytes >= dwFileLength)
				break;

			if( m_bCancelUpdate )
			{
				m_bCancelUpdate = FALSE;  
				return RESULT_DOWNLOAD_STOP;
			}
		}
	}
	else if(dwFileLength == 0)
	{
		return RESULT_DOWNLOAD_SUCCESS;
	}
	else
	{
		// 盔拜瘤 颇老 农扁啊 0焊促 累促.
		SetLastErrorMsg(CWZUpdateModule::ERROR_SYSTEM, GetLastError());
		return RESULT_DOWNLOAD_FAIL;
	}

	return RESULT_DOWNLOAD_SUCCESS;
}



//颇老 府胶飘俊 乐绰 颇老甸阑 促款 罐绰促.
//盔贰 府胶飘颇老 捞抚篮 绊沥牢单.. 弊成 牢磊肺 结霖促.
WZ_DECLAREDLL BOOL CWZFtpUpdateModule::DownloadFilesOnFileList( char* pszRemoteDirPath )
{
	// 肺拿俊 府胶飘 颇老阑 促款 罐疽栏搁, 馆靛矫 角青颇老 版肺俊 乐促. 蝶扼辑 捞抚父 结霖促.
	if(( SMDFile = fopen( DEFAULT_FILELIST_FILE, "r" ) ) == NULL )
	{
		MessageBox (HWND_DESKTOP, "can't open update-list file", "error", MB_OK | MB_ICONERROR);
		return FALSE;
	}

	string strLocalRelativeDirPath;  //肺拿 历厘 叼泛配府 惑措版肺

	// 颇老 府胶飘甫 盒籍秦辑, 颇老 府胶飘俊 乐绰 颇老甸阑 促款 罐绰 备巩..
	while( TRUE )
	{
		SMDToken Token;
		//GetToken窍霸 登搁 SMDFile俊 沥狼等 颇老阑 佬绢辑 Token苞 TokenString俊 蔼阑 府畔窍霸 等促.
		Token = (*GetToken)();		

		if( Token == END ) 
			break;

		if( Token == NAME )		// 颇老捞抚牢 版快
		{
			// 盔拜瘤 龋胶飘狼 傈眉版肺捞抚
			CHAR szCurrentRemoteFilePath[MAX_PATH];
			ZeroMemory( szCurrentRemoteFilePath, MAX_PATH );
			wsprintf(szCurrentRemoteFilePath, "%s\\%s", pszRemoteDirPath, TokenString);

			string strAbsoluteDirPath;
			GetLocalDownAbsoluteDir( strLocalRelativeDirPath, strAbsoluteDirPath ) ;

			//////////////////////////////////////////////////////////////////////////
			// 泅犁 捞 颇老阑 促款 罐篮利捞 乐绰瘤 眉农..
			// 1. 辑滚颇老苞 度鞍篮 肺拿颇老捞 乐绰瘤 眉农
			string strLocalFilePath;
			strLocalFilePath = strAbsoluteDirPath;
			strLocalFilePath += TokenString;

			BOOL bRet = CanDownloadFile( strLocalFilePath, TokenString );
			if(bRet == TRUE) //促款肺靛 秦档 等促搁..
			{
				if ( !DownloadFile(szCurrentRemoteFilePath, const_cast<char*>(strAbsoluteDirPath.data()) ) )
					return FALSE;
			}
			else	//促款肺靛 窍瘤 臼酒档 等促搁.. 捞固 瘤抄锅俊 促款 罐篮 颇老捞促.
				continue;

			// 颇老 促款肺靛啊 己傍沁栏骨肺 颇老 俺荐甫 窍唱 刘啊矫难 霖促.
			m_strtUpdatingFileInfo.uNowFileNum++;

		}

		if( Token == NUMBER )	// 弃歹捞抚牢 版快
		{
			// 0捞搁 弃歹甫 积己窍扼绰 疙飞捞骨肺, 0 促澜俊 唱坷绰 蔼阑 佬绢具 茄促.
			// 弊 蔼捞 弃歹 疙捞促.
			Token = (*GetToken)();

			strLocalRelativeDirPath = "\\";
			strLocalRelativeDirPath += TokenString;
			string strAbsoluteDirPath;
			GetLocalDownAbsoluteDir( strLocalRelativeDirPath, strAbsoluteDirPath ) ;

			CreateDirectory (strAbsoluteDirPath.data(), NULL);				// 肺拿 叼泛配府 积己
		}
	}

	return TRUE;
}

//肺拿 颇老苞 辑滚颇老阑 厚背窍咯 促款 罐阑瘤 救 罐阑瘤甫 搬沥茄促.
//TRUE : 颇老阑 促款 罐绰促.
//FALSE : 颇老阑 促款 罐瘤 臼绰促.
WZ_DECLAREDLL BOOL CWZFtpUpdateModule::CanDownloadFile(string strLocalFilePath, string strRemoteFileName)
{
	//////////////////////////////////////////////////////////////////////////
	// 泅犁 捞 颇老阑 促款 罐篮利捞 乐绰瘤 眉农..
	// 1. 辑滚颇老苞 度鞍篮 肺拿颇老捞 乐绰瘤 眉农
	HANDLE hFile = CreateFile( strLocalFilePath.data(), GENERIC_READ, FILE_SHARE_READ,
		NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );

	if( hFile != INVALID_HANDLE_VALUE )		//颇老捞 粮犁茄促.
	{
		// 2. 盔拜瘤 颇老 沥焊 
		DWORD dwFileLength;
		FILETIME fileTime, localFileTime;
		GetRemoteFileInfo( strRemoteFileName.data(), dwFileLength, fileTime);

		//3. 肺拿颇老 沥焊 佬绢坷扁
		GetFileTime( hFile, NULL, NULL, &localFileTime );

		// 沥焊甫 促 佬菌栏聪, 勤甸阑 摧绰促.
		CloseHandle( hFile );

		// 滴 颇老狼 矫埃捞 悼老窍瘤 臼促.
		if( ( fileTime.dwHighDateTime != localFileTime.dwHighDateTime ) ||
			( fileTime.dwLowDateTime != localFileTime.dwLowDateTime ) )
		{
			return TRUE;
		}
		else  //矫埃付廉 悼老窍促搁... 颇老狼 农扁 厚背
		{
			FILE* pFile = fopen(strLocalFilePath.data(), "r");
			long nLen = _filelength( _fileno(pFile) );
			fclose(pFile);
			return FALSE;
			if( nLen == dwFileLength)  //颇老狼 农扁啊 鞍促搁..
				return FALSE; //颇老阑 促款 罐瘤 臼绰促.
			else
				return TRUE;
		}
	}
	else  //颇老捞 粮犁 窍瘤 臼栏搁..
	{
		return TRUE;	
	}

	//////////////////////////////////////////////////////////////////////////
}

//辑滚客狼 楷搬 惑怕甫 眉农窍绰 静饭靛
//楷搬阑 眉农窍绰 窃荐啊 绝扁 锭巩俊 泅犁 辑滚狼 叼泛配府甫 啊廉坷绰 窃荐肺 眉农茄促.
WZ_DECLAREDLL unsigned __stdcall CWZFtpUpdateModule::CheckConnectThread(LPVOID lpParam)
{
	CWZFtpUpdateModule* lpWZUM = (CWZFtpUpdateModule*) lpParam;

	while( lpWZUM->m_bConnected )
	{
		Sleep(1000);

		HINTERNET hConnection = InternetConnect( lpWZUM->m_hINET_SESSION, lpWZUM->m_szIPADDR, lpWZUM->m_wPORT,
			lpWZUM->m_szID, lpWZUM->m_szPASS, INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0);

		if (hConnection == NULL)  //Ftp俊 楷搬且荐 绝嚼聪促.
		{
			lpWZUM->m_bConnected = FALSE;
			char szError[512];
			wsprintf( szError, "辑滚客 楷搬且荐 绝嚼聪促. ErrorCode = %d", GetLastError() );
			MessageBox(NULL, szError, "舅覆", MB_OK);
			lpWZUM->AddEvent( EVENT_DISCONNECT );
		}
		else
		{
			InternetCloseHandle( hConnection );
		}
	}

	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -