VC编程之VC实现FTP定时上传文件的实现
小标 2019-03-28 来源 : 阅读 1424 评论 0

摘要:本文主要向大家介绍了VC编程之VC实现FTP定时上传文件的实现,通过具体的内容向大家展示,希望对大家学习VC编程有所帮助。

本文主要向大家介绍了VC编程之VC实现FTP定时上传文件的实现,通过具体的内容向大家展示,希望对大家学习VC编程有所帮助。

VC编程之VC实现FTP定时上传文件的实现

 前不久,做了一个小项目,用VC实现客户端FTP定时上传程序,其实是个比较简单的程序,只是刚开始根本不知道VC还自带FTP类,傻乎乎的自己写了Soket底层通信,结果因为基础知识不是很好,半途进展不下去,太复杂了,请教了高手才知道原来VC里自带FTP类,晕!!!下面就和大家共享一下自己的成果!(做的也不是很好,但是现在运行的挺稳定的嘻嘻)
一.需求分析:
主要任务:定时上传本地机器上的特定目录下各个局的话务原始数据到服务器端特定目录下。并进行记录操作日志
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()来实现:
void CFTPClientView::OnInitialUpdate()
{
  CView::OnInitialUpdate();
   
  SetTimer(1,600000,NULL);
   
}
void CFTPClientView::OnTimer(UINT nIDEvent)
{
    ........
      if (nHour==nTime)
    {
        if (nMinute==Minute)
        {
          if (bTimer==TRUE)
          {
              bTimer=FALSE;
              CDataTxt syslog;
              syslog.WriteLogFile("ftp上传程序启动");//写日志
              AfxBeginThread((AFX_THREADPROC)StartRun,&m_nFileStatus);

            }
        }
     
      }
      else
          bTimer = TRUE;
}
3.链接服务器:
BOOL CDataTxt::Connection()
{
    CString hostname;
    int hostport;
    CString username;
    CString password;
 
    //读配置文件 FTPClient.ini
    char a[255];
    CString s;
    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;

    // 连接 FTP server
    pInetSession=new CInternetSession(AfxGetAppName,(),1,PRE_CONFIG_INTERNET_ACCESS);
    try
    {
        pFtpConnection=pInetSession->GetFtpConnection(hostname,username,password,hostport,FALSE);
    }
    catch(CInternetException *pEx)
    {
        pEx->Delete();
        pFtpConnection=NULL;
        LogOffServer();//断开链接
        return false;
    }
    WriteLogFile("ftp登录成功成功");//写日志
    return true;
}

BOOL CDataTxt::LogOffServer()
{//断开链接
    if(pFtpConnection!=NULL)
    {
        pFtpConnection->Close();
        delete pFtpConnection;
    }
    delete pInetSession;
    WriteLogFile("断开与服务器的连接");
    return TRUE;
}
void CDataTxt::WriteLogFile(CString log)
{//写日志
    FILE *fp;
    CHAR strhead[30]="";
    SYSTEMTIME st;
    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是服务器端要创建的目录以及文件名.
//判断文件是否存在:
      CFileFind finder;
    if( !finder.FindFile(localfile) )
      {return FALSE;}
    else
        return TRUE;
//在服务器端创建文件所用函数:
pFtpConnection->CreateDirectory(s);//s为目录名,需要注意的是文件已经创建时,再创建就会返回false

以上就介绍了VC/MFC的学习,希望对VC/MFC有兴趣的朋友有所帮助。了解更多内容,请关注职坐标编程语言VC/MFC频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved