vc ftp定时传输.docx
- 文档编号:6824804
- 上传时间:2023-01-10
- 格式:DOCX
- 页数:11
- 大小:17.44KB
vc ftp定时传输.docx
《vc ftp定时传输.docx》由会员分享,可在线阅读,更多相关《vc ftp定时传输.docx(11页珍藏版)》请在冰豆网上搜索。
vcftp定时传输
一.需求分析:
主要任务:
定时上传本地机器上的特定目录下各个局的话务原始数据到服务器端特定目录下。
并进行记录操作日志
1.界面:
仅有:
读配置文件/退出即可。
2.定时器:
(主要部分)
每天3:
00到3:
30某个时间定时上传文件。
a.上传时段:
03:
00-03:
30
b上传规则:
例:
局名:
东方
上传至数据接口机/u/gdpwg/SZDH/data/下
客户机上传文件名规则:
D:
\timsdata\210\traffic\20060418.rpt
服务器接收文件名规则:
\timsdata\210\traffic\tr20060418.rpt
读取当天时间20060419则上传前一天的数据也就是20060418.rpt—〉tr20060418.rpt
定时器每隔10分钟检测一次,是否到了3:
00或3:
30。
可以判断最后一位是否为0在判断,倒数第二位是否是0或3或者其他算法均可。
总之如果到了3:
00就开始上传文件。
3.上传文件:
根据配置文件中组合的地址,上传所有局的话务数据。
4.日志:
对上传成功失败记录日志;对程序启动时间记录日志。
并形成文本文件在该程序所在目录下
二.具体实现:
1.配置文件:
配置文件根据需求设置如下:
[path]
MAX_ROW=9
path=D:
/tims/timsdata/
subpath=/traffic/
[office]
officename1=111
officename2=222
officename3=333
officename4=444
[Server]
IP=111.111.1.1
port=21
username=***
pwd=***
path1=/******
path2=/******
officename1=SZDH
officename2=SZGR
officename3=TDIR
officename4=TDER
subpath=/spcdata
[startup]
time=15:
36
[firstcreate]
flag=0
2.定时功能由VC中的SetTimer()和OnTimer()来实现:
voidCFTPClientView:
:
OnInitialUpdate()
{
CView:
:
OnInitialUpdate();
SetTimer(1,600000,NULL);
}
voidCFTPClientView:
:
OnTimer(UINTnIDEvent)
{
........
if(nHour==nTime)
{
if(nMinute==Minute)
{
if(bTimer==TRUE)
{
bTimer=FALSE;
CDataTxtsyslog;
syslog.WriteLogFile("ftp上传程序启动");//写日志
AfxBeginThread((AFX_THREADPROC)StartRun,&m_nFileStatus);
}
}
}
else
bTimer=TRUE;
}
3.链接服务器:
BOOLCDataTxt:
:
Connection()
{
CStringhostname;
inthostport;
CStringusername;
CStringpassword;
//读配置文件FTPClient.ini
chara[255];
CStrings;
GetPrivateProfileString("Server","IP","",a,255,"./FTPClient.ini");
s.Format("%s",a);
hostname=s;
GetPrivateProfileString("Server","port","21",a,255,"./FTPClient.ini");
s.Format("%s",a);
hostport=atoi(s);
GetPrivateProfileString("Server","username","",a,255,"./FTPClient.ini");
s.Format("%s",a);
username=s;
GetPrivateProfileString("Server","pwd","",a,255,"./FTPClient.ini");
s.Format("%s",a);
password=s;
//连接FTPserver
pInetSession=newCInternetSession(AfxGetAppName,(),1,PRE_CONFIG_INTERNET_ACCESS);
try
{
pFtpConnection=pInetSession->GetFtpConnection(hostname,username,password,hostport,FALSE);
}
catch(CInternetException*pEx)
{
pEx->Delete();
pFtpConnection=NULL;
LogOffServer();//断开链接
returnfalse;
}
WriteLogFile("ftp登录成功成功");//写日志
returntrue;
}
BOOLCDataTxt:
:
LogOffServer()
{//断开链接
if(pFtpConnection!
=NULL)
{
pFtpConnection->Close();
deletepFtpConnection;
}
deletepInetSession;
WriteLogFile("断开与服务器的连接");
returnTRUE;
}
voidCDataTxt:
:
WriteLogFile(CStringlog)
{//写日志
FILE*fp;
CHARstrhead[30]="";
SYSTEMTIMEst;
GetLocalTime(&st);
memset(strhead,0,sizeof(strhead));
sprintf(strhead,"%4d-%02d-%02d%02d:
%02d:
%02d",st.wYear,st.wMonth,st.wDay,st.wHour,st.wMinute,st.wSecond);
fp=fopen("./syslog.txt","a+");
if(fp!
=NULL)
{
fwrite(strhead,sizeof(CHAR),strlen(strhead),fp);
fwrite(log,sizeof(CHAR),strlen(log),fp);
fwrite("\n",1,1,fp);
fclose(fp);
}
}
3.上传文件:
非常简单用一个函数就解决了:
pFtpConnection->PutFile(localfile,remotefile)//其中localfile是从配置文件中读取的本地文件所在目录文件名,remotefile是服务器端要创建的目录以及文件名.
//判断文件是否存在:
CFileFindfinder;
if(!
finder.FindFile(localfile))
{returnFALSE;}
else
returnTRUE;
//在服务器端创建文件所用函数:
pFtpConnection->CreateDirectory(s);//s为目录名,需要注意的是文件已经创建时,再创建就会返回false
以上只是给出了主要功能的部分实现代码,还请大家多多指教啊!
publicfinalclassFTPExample
{
publicstaticfinalStringUSAGE=
"Usage:
ftp[-s][-b]
"\nDefaultbehavioristodownloadafileanduseASCIItransfermode.\n"+
"\t-sstorefileonserver(upload)\n"+
"\t-busebinarytransfermode\n";
publicstaticfinalvoidmain(String[]args)
{
intbase=0;
booleanstoreFile=false,binaryTransfer=false,error=false;
Stringserver,username,password,remote,local;
FTPClientftp;
for(base=0;base { if(args[base].startsWith("-s")) storeFile=true; elseif(args[base].startsWith("-b")) binaryTransfer=true; else break; } if((args.length-base)! =5) { System.err.println(USAGE); System.exit (1); } server=args[base++]; username=args[base++]; password=args[base++]; remote=args[base++]; local=args[base]; ftp=newFTPClient(); ftp.addProtocolCommandListener(newPrintCommandListener( newPrintWriter(System.out))); try { intreply; ftp.connect(server); System.out.println("Connectedto"+server+"."); //Afterconnectionattempt,youshouldcheckthereplycodetoverify //success. reply=ftp.getReplyCode(); if(! FTPReply.isPositiveCompletion(reply)) { ftp.disconnect(); System.err.println("FTPserverrefusedconnection."); System.exit (1); } } catch(IOExceptione) { if(ftp.isConnected()) { try { ftp.disconnect(); } catch(IOExceptionf) { //donothing } } System.err.println("Couldnotconnecttoserver."); e.printStackTrace(); System.exit (1); } __main: try { if(! ftp.login(username,password)) { ftp.logout(); error=true; break__main; } System.out.println("Remotesystemis"+ftp.getSystemName()); if(binaryTransfer) ftp.setFileType(FTP.BINARY_FILE_TYPE); //Usepassivemodeasdefaultbecausemostofusare //behindfirewallsthesedays. ftp.enterLocalPassiveMode(); if(storeFile) { InputStreaminput; input=newFileInputStream(local); ftp.storeFile(remote,input); input.close(); } else { OutputStreamoutput; output=newFileOutputStream(local); ftp.retrieveFile(remote,output); output.close(); } ftp.logout(); } catch(FTPConnectionClosedExceptione) { error=true; System.err.println("Serverclosedconnection."); e.printStackTrace(); } catch(IOExceptione) { error=true; e.printStackTrace(); } finally { if(ftp.isConnected()) { try { ftp.disconnect(); } catch(IOExceptionf) { //donothing } } } System.exit(error? 1: 0); }//endmain }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- vc ftp定时传输 ftp 定时 传输