?? mainfrm.cpp
字號:
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 + -