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

📄 mainfrm.cpp

📁 ftp_WinInet-visual C++
💻 CPP
📖 第 1 页 / 共 5 页
字号:
			strcpy(fileInfo->szFileSize,str);
			fileInfo->nType=FILEICON;
			::SendMessage(pLocView->m_hWnd,WM_SETFILE,(WPARAM)fileInfo,
				(LPARAM)LOCFILE);
		}
	}
	::SendMessage(pLocView->m_hWnd,WM_SETREDRAWFLAG,0,0);
	delete fileInfo;
	fileExsit.Close();
	return 0L;
}

UINT CFtpThread::CFtp_Findserverfile(LPVOID lParam)
{
	CFtpParaClass::FILE_FTP_INFO* fileInfo=new(CFtpParaClass::FILE_FTP_INFO);
	FILETIME fileTime;
	CString str,szFile,outinfo;
	WIN32_FIND_DATA findData;
	HINTERNET hFind;
	HINTERNET InternetSession=InternetOpen(szAppName,INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0);
	outinfo="正在连接";
	outinfo+=szFtpName;
	outinfo+="服务器";
    
    pview=(CInfoListView*)pMain->m_wndSplitter1.GetPane(1,0);

	////////////////
	HINTERNET hFtpConn=InternetConnect(InternetSession,szFtpName,nPort,
		szFtpUser,szFtpPassword,INTERNET_SERVICE_FTP,INTERNET_FLAG_PASSIVE,0);
	if(!hFtpConn)
	{
		outinfo=szFtpName;
		outinfo+="服务器未接上";

    CInfoListView* pview;
    pview=(CInfoListView*)pMain->m_wndSplitter1.GetPane(1,0);

		InternetCloseHandle(InternetSession);
		::Sleep(10);
		return 0L;
	}
	outinfo=szFtpName;
	outinfo+="服务器已连上,用户";
	outinfo+=szFtpUser;
	outinfo+="登录成功";

    CInfoListView* pview;
    pview=(CInfoListView*)pMain->m_wndSplitter1.GetPane(1,0);

	DWORD dwLength=MAX_PATH;
	if(Ftpdirectory!=0)
		FtpSetCurrentDirectory(hFtpConn,Ftpdirectory);
	FtpGetCurrentDirectory(hFtpConn,Ftpdirectory,&dwLength);
	::PostMessage(pServView->m_hWnd,WM_SETDIRECTORYDISPLAY,0,0);
	outinfo="正在查找文件";

    pview=(CInfoListView*)pMain->m_wndSplitter1.GetPane(1,0);


	if(!(hFind=FtpFindFirstFile(hFtpConn,_T("*"),&findData,0,0)))
	{
		if (GetLastError()  == ERROR_NO_MORE_FILES) 
		{
			AfxMessageBox("目录为空,没有多余的内容");
			goto end;
		}
		else
		{
			outinfo="文件查找出错,退回,请查明原因";

    CInfoListView* pview;
    pview=(CInfoListView*)pMain->m_wndSplitter1.GetPane(1,0);

			goto end;
		}
	}
	do{
		szFile=findData.cFileName;
		strcpy(fileInfo->szFileName,szFile);
		fileTime=findData.ftLastWriteTime;
		CTime mmtimes=CTime(fileTime);
		CString str=mmtimes.Format("%x");
		strcpy(fileInfo->szFileDate,str);
		if(findData.dwFileAttributes==FILE_ATTRIBUTE_DIRECTORY)
		{
			strcpy(fileInfo->szFileSize,"");
			fileInfo->nType=DIRECTORYICON;
		}
		else
		{
			DWORD i=findData.nFileSizeLow;
			if(i>1024)
			{
				str.Format("%ld",i/1024);
				str+="KB";
			}
			else
				str.Format("%ld",i);
			strcpy(fileInfo->szFileSize,str);
			fileInfo->nType=FILEICON;
		}
		::SendMessage(pServView->m_hWnd,WM_SETFILE,(WPARAM)fileInfo,(LPARAM)SERVFILE);
		
	}while(InternetFindNextFile(hFind,&findData));
	
	::SendMessage(pServView->m_hWnd,WM_SETREDRAWFLAG,0,0);
	InternetCloseHandle(hFind);
end:
	outinfo="查找文件结束";

    pview=(CInfoListView*)pMain->m_wndSplitter1.GetPane(1,0);
 
	::Sleep(10);
	delete fileInfo;
	InternetCloseHandle(hFtpConn);
	InternetCloseHandle(InternetSession);
	return 0L;	
}

UINT CFtpThread::CFtp_Sendfile(LPVOID lParam)
{
	IsFree=TRUE;
	CFtpParaClass:: FILE_FTP_INFO* pInf=new (CFtpParaClass::FILE_FTP_INFO);
	CFtpParaClass::FILE_COUNT_INFO* fileInfo=(CFtpParaClass::FILE_COUNT_INFO*)lParam;
    BOOL Result;
	CInternetSession* lpInetSession;
	CFtpConnection* FTPConnect;
	CString str,strFtp,OldLoc,OldFtp,outinfo;
	lpInetSession=new CInternetSession(szAppName,1,PRE_CONFIG_INTERNET_ACCESS);
	if(!lpInetSession)
		return 0;
	try
	{
		FTPConnect=lpInetSession->GetFtpConnection(szFtpName,szFtpUser,szFtpPassword,nPort);
	}
	catch(CInternetException* lpEx)
	{
		lpEx->ReportError();
		lpEx->Delete();
		delete lpInetSession;
		return 0;
	}
	FTPConnect->SetCurrentDirectory(Ftpdirectory);
	::SetCurrentDirectory(Localdirectory);
	OldLoc=Localdirectory;
	OldFtp=Ftpdirectory;
	for(int i=0;i<nCount;i++)
	{
		str=OldLoc;
		strFtp=OldFtp;
		CString DirName=fileInfo[i].fileName;
		if(fileInfo[i].ufileFlag==FILEICON)
		{
			outinfo="发送";
			outinfo+=DirName;

    CInfoListView* pview;
    pview=(CInfoListView*)pMain->m_wndSplitter1.GetPane(1,0);
 

			if(FTPConnect->PutFile(DirName,DirName))
			{
				if(IsFree)
				{
					IsFree=FALSE;
					strcpy(pInf->szFileName,DirName);
					strcpy(pInf->szFileDate,"");
					strcpy(pInf->szFileSize,"");
					pInf->nType=FILEICON;
					::PostMessage(pServView->m_hWnd,WM_SETFILE,(WPARAM)pInf,SERVFILE);
				}
				continue;
			}
			else
			{
				outinfo="发送";
				outinfo+=DirName;
				outinfo+="出错";

    CInfoListView* pview;
    pview=(CInfoListView*)pMain->m_wndSplitter1.GetPane(1,0);

				break;
			}
		}
		else
		{
			if(str.Right(1)=="\\")
				str+=DirName;
			else
				str+="\\"+DirName;
			if(strFtp.Right(1)=='/')
				strFtp+=DirName;
			else
				strFtp+="/"+DirName;
			if(Result=CFtp_Beforesendfile(FTPConnect,str,strFtp,(LPVOID)fileInfo))
				continue;
			else
			{
				AfxMessageBox("发送有错,请查明原因");
				break;
			}
		}
	}
	
	outinfo="文件发送结束,退回";
	outinfo+=OldFtp;
//    pFtpInfoView->PostMessage(WM_RECORDFTPINFO,0,(LPARAM)(LPCTSTR)outinfo);

	
		

    CInfoListView* pview;
    pview=(CInfoListView*)pMain->m_wndSplitter1.GetPane(1,0);

	::Sleep(10);
	if(IsFree)
		::SendMessage(pServView->m_hWnd,WM_REDISPLAYFILE,(WPARAM)(LPCTSTR)OldFtp,0);
	delete[] fileInfo;
	delete pInf;
	delete FTPConnect;
	delete lpInetSession;
	return 0L;

}


BOOL CFtpThread::CFtp_Beforesendfile(CFtpConnection* lpFtp,CString& str,CString& strFtp,LPVOID pInf)
{
	CFtpParaClass:: FILE_FTP_INFO* fileInfo=(CFtpParaClass::FILE_FTP_INFO*)pInf;
	BOOL result;
	UINT Size_t;
	CFileFind fileExsit;
	HANDLE m_phandle;
	LPSTR bufferss;
	CString ftpbuffer,outinfo;
	CFtpConnection* FTPConnect=lpFtp;
	Size_t=(GetCurrentDirectory(0,NULL)*sizeof(TCHAR));
	m_phandle=GetProcessHeap();
	bufferss=(LPSTR)HeapAlloc(m_phandle,HEAP_ZERO_MEMORY,Size_t);
	FTPConnect->GetCurrentDirectory(ftpbuffer);
	GetCurrentDirectory(Size_t,(LPTSTR)(LPCTSTR)bufferss);
	if(str!=bufferss)
	{
		SetCurrentDirectory(str);
		outinfo="创建";
		outinfo+=strFtp;
		outinfo+="目录";

    CInfoListView* pview;
    pview=(CInfoListView*)pMain->m_wndSplitter1.GetPane(1,0);


		FTPConnect->CreateDirectory(strFtp);
		FTPConnect->SetCurrentDirectory(strFtp);
		outinfo="进入";
		outinfo+=strFtp;
		outinfo+="目录成功";

    pview=(CInfoListView*)pMain->m_wndSplitter1.GetPane(1,0);

		::SendMessage(pServView->m_hWnd,WM_SETDIR,0,(LPARAM)(LPCTSTR)strFtp);;
	}
	UINT Is_continu=fileExsit.FindFile("*");
	CString tFile;
	if(Is_continu)
	{
		do
		{
			Is_continu=fileExsit.FindNextFile();
			tFile=fileExsit.GetFileName();
			if(tFile=="."||tFile==".."||fileExsit.IsHidden())continue;
			if(fileExsit.IsDirectory())
			{
				if(str.Right(1)=='\\')
				{
					if(strFtp.Right(1)=='/')
						CFtp_Beforesendfile(FTPConnect,str+tFile,strFtp+tFile,(LPVOID)fileInfo);
					else
						CFtp_Beforesendfile(FTPConnect,str+tFile,strFtp+"/"+tFile,(LPVOID)fileInfo);
				}
				else
				{
					if(strFtp.Right(1)=='/')
						result=CFtp_Beforesendfile(FTPConnect,str+"\\"+tFile,strFtp+tFile,(LPVOID)fileInfo);
					else
						result=CFtp_Beforesendfile(FTPConnect,str+"\\"+tFile,strFtp+"/"+tFile,(LPVOID)fileInfo);
				}
			}
			else
			{
				outinfo="发送";
				outinfo+=tFile;

    CInfoListView* pview;
    pview=(CInfoListView*)pMain->m_wndSplitter1.GetPane(1,0);
 
				result=(FTPConnect->PutFile(tFile,tFile))?TRUE:FALSE;
				if(IsFree)
				{
					IsFree=FALSE;
					strcpy(fileInfo->szFileName,tFile);
					strcpy(fileInfo->szFileDate,"");
					strcpy(fileInfo->szFileSize,"");
					fileInfo->nType=FILEICON;
					::PostMessage(pServView->m_hWnd,WM_SETFILE,(WPARAM)pInf,SERVFILE);
				}
				continue;
			}
		}while(Is_continu);
		fileExsit.Close();
		SetCurrentDirectory(bufferss);
		outinfo="退回";
		outinfo+=ftpbuffer;

    CInfoListView* pview;
    pview=(CInfoListView*)pMain->m_wndSplitter1.GetPane(1,0);

		FTPConnect->SetCurrentDirectory(ftpbuffer);
		::SendMessage(pServView->m_hWnd,WM_SETDIR,0,(LPARAM)(LPCTSTR)ftpbuffer);
		HeapFree(m_phandle,HEAP_NO_SERIALIZE,bufferss);
		return result;
	}
	fileExsit.Close();
	SetCurrentDirectory(bufferss);
	FTPConnect->SetCurrentDirectory(ftpbuffer);
	::SendMessage(pServView->m_hWnd,WM_SETDIR,0,(LPARAM)(LPCTSTR)ftpbuffer);
	HeapFree(m_phandle,HEAP_NO_SERIALIZE,bufferss);
	return FALSE;
}

UINT CFtpThread::CFtp_Receivefile(LPVOID lParam)
{
	IsFree=TRUE;
	CString outinfo;
	CFtpParaClass:: FILE_FTP_INFO* pInf=new (CFtpParaClass::FILE_FTP_INFO);
	CFtpParaClass::FILE_COUNT_INFO* fileInfo=(CFtpParaClass::FILE_COUNT_INFO*)lParam;
	BOOL Result;
	CString str,strFtp,OldLoc,OldFtp;
	HINTERNET InternetSession=InternetOpen(szAppName,INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0);
	HINTERNET hFtpConn=InternetConnect(InternetSession,szFtpName,nPort,
		szFtpUser,szFtpPassword,INTERNET_SERVICE_FTP,INTERNET_FLAG_PASSIVE,0);
	if(!hFtpConn)
	{
		AfxMessageBox("建立联接出错,返回");
		InternetCloseHandle(InternetSession);
		return 0L;
	}
	outinfo="正在进入";
	outinfo+=Ftpdirectory;

    CInfoListView* pview;
    pview=(CInfoListView*)pMain->m_wndSplitter1.GetPane(1,0);
 
	
	
	
	FtpSetCurrentDirectory(hFtpConn,Ftpdirectory);
    ::SetCurrentDirectory(Localdirectory);
	OldLoc=Localdirectory;
	OldFtp=Ftpdirectory;
	for(int i=0;i<nCount;i++)
	{
		str=OldLoc;
		strFtp=OldFtp;
		CString DirName=fileInfo[i].fileName;
		if(fileInfo[i].ufileFlag==FILEICON)
		{
			outinfo="正在接收";
			outinfo+=DirName;

    CInfoListView* pview;
    pview=(CInfoListView*)pMain->m_wndSplitter1.GetPane(1,0);

			
			
			if(FtpGetFile(hFtpConn,DirName,DirName,FALSE,FILE_ATTRIBUTE_NORMAL,FTP_TRANSFER_TYPE_BINARY |
				INTERNET_FLAG_NO_CACHE_WRITE,0))
			{
				if(IsFree)
				{
					IsFree=FALSE;
					strcpy(pInf->szFileName,DirName);
					strcpy(pInf->szFileDate,"");
					strcpy(pInf->szFileSize,"");
					pInf->nType=FILEICON;
					::PostMessage(pLocView->m_hWnd,WM_SETFILE,(WPARAM)pInf,(LPARAM)SERVFILE);
				}
				outinfo="接收";
				outinfo+=DirName;
				outinfo+="完毕,下一个";

    CInfoListView* pview;
    pview=(CInfoListView*)pMain->m_wndSplitter1.GetPane(1,0);

				
				
				continue;
			}
			else
			{
				outinfo="接收";
				outinfo+=DirName;
				outinfo+="出错,退出查找原因";

    CInfoListView* pview;
    pview=(CInfoListView*)pMain->m_wndSplitter1.GetPane(1,0);

				
				
				
				break;
			}
		}
		else
		{
			if(str.Right(1)=="\\")
				str+=DirName;
			else
				str+="\\"+DirName;
			if(strFtp.Right(1)=='/')
				strFtp+=DirName;
			else
				strFtp+="/"+DirName;
			if(Result=CFtp_Beforereceivefile(InternetSession,str,strFtp,(LPVOID)pInf))
				continue;
			else
			{
				AfxMessageBox("发送有错,请查明原因");
				break;
			}
		}
	}
	outinfo="文件接收结束,退回";
	outinfo+=OldLoc;

    pview=(CInfoListView*)pMain->m_wndSplitter1.GetPane(1,0);
 
	
	
	::Sleep(20);
	if(IsFree)
	{
		::SendMessage(pLocView->m_hWnd,WM_REDISPLAYFILE,(WPARAM)(LPCTSTR)OldLoc,0);
	}

	delete[] fileInfo;
	delete pInf;
	InternetCloseHandle(hFtpConn);
	InternetCloseHandle(InternetSession);
	return 0L;

}

UINT CFtpThread::CFtp_Deletefile(LPVOID lParam)
{
	IsFree=TRUE;
	CString outinfo;
	CFtpParaClass::FILE_COUNT_INFO* fileInfo=(CFtpParaClass::FILE_COUNT_INFO*)lParam;
	BOOL Result;
	CString strFtp,OldFtp;
	HINTERNET InternetSession=InternetOpen(szAppName,INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0);
	outinfo="正在连接";
	outinfo+=szFtpName;

    CInfoListView* pview;
    pview=(CInfoListView*)pMain->m_wndSplitter1.GetPane(1,0);
 
	
	
	
	
	HINTERNET hFtpConn=InternetConnect(InternetSession,szFtpName,nPort,
		szFtpUser,szFtpPassword,INTERNET_SERVICE_FTP,INTERNET_FLAG_PASSIVE,0);
	if(!hFtpConn)
	{
		outinfo="未连接上";
		outinfo+=szFtpName;
		outinfo+="服务器";

    CInfoListView* pview;
    pview=(CInfoListView*)pMain->m_wndSplitter1.GetPane(1,0);
 
		

⌨️ 快捷键说明

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