IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C++MFC开发之文件定时上传FTP(单位:分钟)+日志输出+配置文件读写 -> 正文阅读

[C++知识库]C++MFC开发之文件定时上传FTP(单位:分钟)+日志输出+配置文件读写

?

//读取配置文件方法
CString config(CString title,CString column)
{
?? ??? ?CString iniFilePath = "C://二次上传//config.ini";
?? ??? ??? ??? ?DWORD ret;
?? ??? ??? ??? ?FILE * fp = fopen((CT2A)(iniFilePath), "r");
?? ??? ??? ??? ?CString returnString;
?? ??? ??? ??? ?TCHAR szValue[MAX_PATH + 1] = _T("");
?? ??? ??? ??? ?if (fp) {
?? ??? ??? ??? ??? ?ret = GetPrivateProfileString(title,column, _T(""), szValue, MAX_PATH, iniFilePath);
?? ??? ??? ??? ??? ?returnString = szValue;
?? ??? ??? ??? ??? ?//OutputDebugString(returnString);
?? ??? ??? ??? ??? ?return returnString;
?? ??? ??? ??? ?}
}

//调用方法

CString IP = config("WHTK","IP");

//配置文件内容

[WHTK]
IP=192.168.191.163
//日志文件输出方法
void WriteLog(char * szLog)
{
?? ?SYSTEMTIME st;
?? ?GetLocalTime(&st);
?? ?FILE *fp;
?? ?char * folderPath = "C:\\二次上传\\logs";?
? ? if (!PathIsDirectory(folderPath)) ?// 是否有重名文件夹
? ? {
? ? ? ? ::CreateDirectory(folderPath, 0);
? ? }
?? ?char * Path = "\\";?
?? ?time_t t = time(NULL);
?? ?char ch[64] = {0};
?? ?strftime(ch, sizeof(ch) - 1, "%Y-%m-%d", localtime(&t));
?? ?char * logPath = "log.txt";?
?? ?char test[100];
?? ?strcpy_s(test,folderPath);
?? ?strcat_s(test,Path);
?? ?strcat_s(test,ch);
?? ?strcat_s(test,logPath);
?? ?int n = strlen(test);
?? ?fp = fopen(test, "at");
?? ?//fp = fopen(("C:\\logs\\log.txt"), "at");
?? ?fprintf(fp, "%d-%d-%d %d:%d:%d:%d ?",st.wYear,st.wMonth,st.wDay,st.wHour, st.wMinute, st.wSecond, st.wMilliseconds);
?? ?fprintf(fp, szLog);
?? ?fclose(fp);
?? ?OutputDebugStringA(szLog);
}

//调用方法

WriteLog("获取到未上传文件\n");

?


//连接FTP 上传文件
BOOL FTP_Upload(char *szHostName, char *szUserName, char *szPassword, char *szUrlPath, char *FilePath)
{
	HINTERNET hInternet, hConnect, hFTPFile = NULL;
	DWORD dwBytesReturn = 0;
	DWORD UploadDataSize = 0;
	BYTE *pUploadData = NULL;
	DWORD dwRet, bRet = 0;

	hInternet = ::InternetOpen("WinInet Ftp Upload V1.0", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
	hConnect = ::InternetConnect(hInternet, szHostName, INTERNET_INVALID_PORT_NUMBER, szUserName, szPassword, 
		INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0);
	hFTPFile = ::FtpOpenFile(hConnect, szUrlPath, GENERIC_WRITE, FTP_TRANSFER_TYPE_BINARY | INTERNET_FLAG_RELOAD, NULL);
	HANDLE hFile = ::CreateFile(FilePath, GENERIC_READ | GENERIC_WRITE,FILE_SHARE_READ | 
		FILE_SHARE_WRITE, NULL, OPEN_EXISTING,FILE_ATTRIBUTE_ARCHIVE, NULL);//每调用一次CreateFile函数都会打开一个文件内核对象用于管理文件,每个内核对象内部都维护了一个文件指针,表示应该在哪里执行下一次同步读取或写入操作。
	if (INVALID_HANDLE_VALUE == hFile)
		return FALSE;

	UploadDataSize = ::GetFileSize(hFile, NULL);
	pUploadData = new BYTE[UploadDataSize];
	::ReadFile(hFile, pUploadData, UploadDataSize, &dwRet, NULL);
	UploadDataSize = dwRet;

	bRet = ::InternetWriteFile(hFTPFile, pUploadData, UploadDataSize, &dwBytesReturn);
	if (FALSE == bRet)
	{
		delete[]pUploadData;
		return FALSE;
	}
	delete[]pUploadData;
	InternetCloseHandle(hInternet);
	InternetCloseHandle(hConnect);
	InternetCloseHandle(hFTPFile);
	//SetEndOfFile(hFile);函数会根据文件对象的文件指针当前所在的位置来截断文件的大小或增大文件的大小
	CloseHandle(hFile);//关闭当前打开的文档流
	return TRUE;
}
//调用示例 IP地址,用户名,密码,upfilepath上传路径,filepath本地路径 

BOOL bRET = FTP_Upload((LPSTR)(LPCSTR)IP, (LPSTR)(LPCSTR)NAME, (LPSTR)(LPCSTR)PWD, (LPSTR)(LPCSTR)upfilepath,(LPSTR)(LPCSTR)filepath);

?

UINT SetTimer(UINT nIDEvent,UINT nElapse,void(CALLBACK EXPORT *lpfnTimer)(HWND,UINT  ,DWORD));
CString strtype ="1";
//定时器函数
void CTwoUploadDlg::OnTimer(UINT_PTR nIDEvent)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	switch (nIDEvent)      
	{      
	case 1:      
		// 如果收到ID为1的定时器的消息则调用func1函数      
		//  func1();      
		if(strtype=="1")
		{
			CString log="";
//获取需要上传的目录文件
			CString strPath="C://Erro//*.jpg"; 
			CFileFind find;//文件搜索类对象
			BOOL gofind =find.FindFile(strPath);//开启查找
			while(gofind)
			{
				WriteLog("获取到未上传文件\n");
				gofind =find.FindNextFile();
				CString filename =find.GetFileName();
				CString filepath = find.GetFilePath();
				log="文件路径:"+filepath+"\n";
				WriteLog((LPSTR)(LPCSTR)log);

				CString upfilepath = config("WHTK","UPFILE")+filename;
				log="上传目录:"+ upfilepath +"\n";
				WriteLog((LPSTR)(LPCSTR)log);
				CString IP = config("WHTK","IP");
				CString NAME = config("WHTK","NAME");
				CString PWD = config("WHTK","PWD");
				BOOL bRET = FTP_Upload((LPSTR)(LPCSTR)IP, (LPSTR)(LPCSTR)NAME, (LPSTR)(LPCSTR)PWD, (LPSTR)(LPCSTR)upfilepath,(LPSTR)(LPCSTR)filepath);
				if(bRET)
				{
					DeleteFile(filepath);
			     	log="删除目录文件:"+ filepath +"\n";
				    WriteLog((LPSTR)(LPCSTR)log);
					//	find.Close();关闭文件
					/* char *savePath =(LPSTR)(LPCSTR)filepath;
					if(remove(savePath)==0)
					{
					AfxMessageBox(_T("删除成功!"));
					}
					else
					{
					AfxMessageBox(_T("删除失败!"));
					}*/

					//remove(filepath);
				}
				else
				{
					WriteLog("连接失败上传失败\n");
				}
				WriteLog("***************************************************\n");
			}
		}
		else	
		{
			KillTimer(nIDEvent);//关闭定时器
		}
		break;      
	case 2:      
		// 如果收到ID为2的定时器的消息则调用func2函数      
		// fun2();    
		//  KillTimer(nIDEvent);
		break;     

	default:      
		break;      
	}      
	CDialogEx::OnTimer(nIDEvent);
}
//按钮点击事件调用方案
void CTwoUploadDlg::OnClickedButton1()
{
	// TODO: 在此添加控件通知处理程序代码

	/*CTime timeNow;
	CString strTime;
	timeNow = CTime::GetCurrentTime();
	strTime = timeNow.Format("%Y/%m/%d %H:%M:%S");*/
	CString str;
	GetDlgItemText(IDC_BUTTON1, str);
	if (str == _T("开始"))
	{
		SetDlgItemText(IDC_BUTTON1, _T("暂停"));
		GetDlgItem(IDC_EDIT2)->EnableWindow(FALSE);
		strtype="1";
		CString str;
		GetDlgItemText(IDC_EDIT2,str);
		SetTimer(1,atoi(str) *60000,NULL);


	}
	else
	{
		SetDlgItemText(IDC_BUTTON1, _T("开始"));
		GetDlgItem(IDC_EDIT2)->EnableWindow(TRUE);
		//BOOL KillTimer(UINT_PTR nIDEvent);
		strtype="2";
		SetTimer(1,1000,NULL);
	}

}

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-04-04 11:50:13  更:2022-04-04 11:55:29 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 0:02:22-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码