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

📄 mytask.cpp

📁 FTP上传工具,FTP上传的小例子,包括定制时间上传功能
💻 CPP
字号:
// MyTask.cpp: implementation of the CMyTask class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "FtpServer.h"
#include "MyTask.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CMyTask::CMyTask()
{
	m_SurveillantPath = "";
	m_FtpServer = "";
	m_FtpUserName = "";
	m_FtpUserPsw = "";
	m_UploadRename = FALSE;
	m_UploadDelete = FALSE;
	m_IntervalMinute = 0;
	m_NowStep = 0;
	m_RemoteFilePath = "";
	m_IntervalHour = 0;
	m_starthour = 0;
	m_endhour = 0;
	memset(&m_TstartDate, 0, sizeof(m_TstartDate));
	memset(&m_TendDate, 0, sizeof(m_TendDate));
	m_AlreadyStart = FALSE;
}

CMyTask::~CMyTask()
{

}

//查看文件是否存在
BOOL  CMyTask::CheckFileExist(CString szFilePathName)
{
	CFileFind   find;   
	BOOL ret = find.FindFile(szFilePathName);
	find.Close();
	return ret;
}

//文件改名
BOOL CMyTask::RenameFile(CString szFilePathName,CString szNewFileName)
{
	if(!rename(szFilePathName,szNewFileName))
      return TRUE;
	else
      return FALSE;
}

//删除文件
BOOL CMyTask::DeleteFiles(CString szFilePathName)
{
	CString szPathname=szFilePathName;
    BOOL RET=DeleteFile(szPathname);
	return RET;
}

//上传操作
BOOL CMyTask::UpLoad()
{
	int icount=0;
	m_Log.PrintMsg("***==================================***");
	char szLog[1024]={0};
	sprintf(szLog,"开始FTP传送:目的地:%s",m_FtpServer.GetBuffer(0));
	m_Log.PrintMsg(szLog);
	m_hFtp = NULL;
	m_hFtp=m_FtpClient.ftpConnect(m_FtpServer,m_FtpUserName,m_FtpUserPsw);
	if (m_hFtp)
	{
		if ( !m_FtpClient.ftpSetCurrentDirectory(m_hFtp,m_RemoteFilePath))
		{
			sprintf(szLog,"用户(%s)无权进行写操作。",m_FtpUserName.GetBuffer(0));
            m_Log.PrintMsg(szLog,ERRORMSG); 
		}
		else
		{
            sprintf(szLog,"用户(%s)登陆FTP服务器%s成功!。",m_FtpUserName.GetBuffer(0),m_FtpServer.GetBuffer(0));
            m_Log.PrintMsg(szLog); 
		}
		
	}
	else
	{
		sprintf(szLog,"连接FTP服务器(%s)失败!",m_FtpServer.GetBuffer(0));
		m_Log.PrintMsg(szLog,ERRORMSG); 
		
		while (icount >= 5)
		{
			//重连
			Sleep(1000*60*2);
			sprintf(szLog,"正在重新连接FTP服务器%s",m_FtpServer.GetBuffer(0));
            m_Log.PrintMsg(szLog); 
			m_hFtp=m_FtpClient.ftpConnect(m_FtpServer,m_FtpUserName,m_FtpUserPsw);
			if (m_hFtp)
			{
				if ( !m_FtpClient.ftpSetCurrentDirectory(m_hFtp,m_RemoteFilePath))
				{
					sprintf(szLog,"用户(%s)无权进行写操作。",m_FtpUserName.GetBuffer(0));
					m_Log.PrintMsg(szLog,ERRORMSG); 
				}else
				{
					sprintf(szLog,"用户(%s)登陆FTP服务器%s成功!。",m_FtpUserName.GetBuffer(0),m_FtpServer.GetBuffer(0));
					m_Log.PrintMsg(szLog); 
					break;
				}
			}
			icount++;
		}
	}
	FtpProc();
	return TRUE;
}

BOOL CMyTask::FtpProc()
{
	if(!m_hFtp)
		m_hFtp=m_FtpClient.ftpConnect(m_FtpServer,m_FtpUserName,m_FtpUserPsw);
	if(!m_hFtp)
	{
		m_Log.PrintMsg("FTP连接失败,重新连接",WARNMSG);
		return false;
	}
	PutFile();
	
	//可能是以为连接句柄没有释放,所以有时候会出现通道阻塞(040524)
	InternetCloseHandle(m_hFtp);
	m_hFtp = NULL;
	return 0;
}

BOOL CMyTask::PutFile()
{
	char szSuc[512];
	char szRemoteFilePath[512];
	sprintf(szRemoteFilePath,"%s/",m_RemoteFilePath.GetBuffer(0));
	char szFileName[512],szFilePath[512];
	SYSTEMTIME stime;
	GetLocalTime(&stime);
	sprintf(szFilePath,m_SurveillantPath);
	
	char path_buffer[1024];
	char drive[1024];
	char dir[1024];
	char fname[1024];
	char ext[1024];
	strcpy(path_buffer,m_SurveillantPath);
	_splitpath( path_buffer, drive, dir, fname, ext);
	sprintf(szFileName,"%s%s",fname,ext);

	char szTMPRemoteFileName[100];
	sprintf(szTMPRemoteFileName,"TMP%04d-%02d-%02d %02d:%02d:%02d.%03d_%s",stime.wYear,stime.wMonth,stime.wDay,stime.wHour,stime.wMinute,stime.wSecond,stime.wMilliseconds,szFileName);
	if(m_hFtp)
		m_FtpClient.ftpSetCurrentDirectory(m_hFtp,szRemoteFilePath);
	if(m_FtpClient.ftpPutFile(m_hFtp,szTMPRemoteFileName,szFilePath))
	{
		::FtpRenameFile(m_hFtp,szTMPRemoteFileName,szFileName);
		char szTmp[1024];
		sprintf(szTmp,"%04d-%02d-%02d %02d:%02d:%02d.%03d",stime.wYear,stime.wMonth,stime.wDay,stime.wHour,stime.wMinute,stime.wSecond,stime.wMilliseconds);
		sprintf(szSuc,"上传文件[%s]成功! [最后纪录时间:%s]",szFileName,szTmp);
		m_Log.PrintMsg(szSuc);

		//改名或删除
		if (m_UploadDelete)
		{
              if (DeleteFiles(m_SurveillantPath))
			  {
				  	sprintf(szSuc,"上传文件[%s]删除成功! ",szFileName);
					m_Log.PrintMsg(szSuc);
			  }
			  else
			  {	
				  sprintf(szSuc,"上传文件[%s]删除失败! ",szFileName);
				  m_Log.PrintMsg(szSuc,ERRORMSG);
			  }
		}
		if (m_UploadRename)
		{
			//生成名字
			CString szDesname;
			CString szTempname;
			SYSTEMTIME stime;
			GetLocalTime(&stime);
			szDesname.Format("%s%s%s_%04d%02d%02d%02d%02d%02d%s",drive,dir,fname,stime.wYear,stime.wMonth,stime.wDay,stime.wHour,stime.wMinute,stime.wSecond,ext);
			szTempname.Format("%s_%04d%02d%02d%02d%02d%02d%s",fname,stime.wYear,stime.wMonth,stime.wDay,stime.wHour,stime.wMinute,stime.wSecond,ext);
			if (RenameFile(m_SurveillantPath,szDesname))
			{
				sprintf(szSuc,"上传文件[%s]改名为[%s]成功! ",szFileName,szTempname);
				m_Log.PrintMsg(szSuc);
			}
			else
			{	
				sprintf(szSuc,"上传文件[%s]改名为[%s]失败! ",szFileName,szTempname);
				m_Log.PrintMsg(szSuc,ERRORMSG);
			}
              
		}
		
	}else
    {
		char szSuc[512];
		sprintf(szSuc,"上传文件[%s]失败!",szFileName);
		m_Log.PrintMsg(szSuc,ERRORMSG);
		InternetCloseHandle(m_hFtp);
		m_hFtp = NULL;
		Sleep(3000);
	}
	m_Log.PrintMsg("***==================================***");
	return 1;
}

⌨️ 快捷键说明

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