baby phat,上传flash,十二生肖爆裂战士
/**************************************************************************************/ /* 程序名:_ftp.h,此程序是freecplus框架的ftp客户端工具的类的声明文件。 */ /* 作者:c语言技术网(www.freecplus.net) 日期:20190525。 */ /* */ /* freecplus开源许可协议正文如下: */ /* 版权所有 (c) 2008-2020, 码农有道,c语言技术网(www.freecplus.net)。 */ /* 特此向任何得到本软件副本或相关文档的人授权:被授权人有权使用、复制、修改、 */ /* 合并、出版、发布、散布、再授权和/或贩售软件及软件的副本,及授予被供应人同 */ /* 等权利,只需服从以下义务: */ /* 在软件和软件的所有副本中都必须包含以上版权声明和本许可声明。 */ /* 如果违返,无论在本软件的使用上或其他买卖交易中是否涉及合同,都属于侵权行为, */ /* 我们保留追究的权利。 */ /* freecplus开源许可协议正文结束。 */ /**************************************************************************************/
// // 本程序演示cftp客户端类,采用ftp协议从服务器上获取文件 // #include "_ftp.h" int main(int argc,char *argv[]) { cftp ftp; // 登录远程ftp服务器 if (ftp.login("45.189.123.78","ssc","123",ftplib_passive) == false) { printf("ftp.login() failed.\n"); return -1; } ftp.chdir("/home/ssc_zcys/ssc/profession/qxidc/data/ftp/surfdata"); ftp.nlist("/home/ssc_zcys/ssc/profession/qxidc/data/ftp/surfdata","/tmp/tmp.list"); ftp.nlist("","/tmp/tmp.list1"); ftp.nlist(".","/tmp/tmp.list2"); ftp.nlist("*","/tmp/tmp.list3"); ftp.put("/home/ssc/desktop/qxidc/data/ftp/surfdata/surf_zh_20200509160907_5553.txt","/tmp/surf_zh_20200509160907_5553.txt",true); // 改变本地目录 chdir("/tmp"); //根目录下的tmp文件夹 // 进入ftp服务器上文件存放的目录 if (ftp.chdir("/home/ssc_zcys/ssc/profession/qxidc/data/ftp/surfdata") == false) { printf("ftp.chdir() failed.\n"); return -1; } // 获取对方目录文件的列表,存放在"/tmp/ftp.list"文件中 if (ftp.nlist("*.txt","/tmp/ftp.list")== false) { printf("ftp.nlist() failed.\n"); return -1; } cfile file; file.open("/tmp/ftp.list","rt"); char strfilename[101]; // 逐行读取文件的内容,并把文件get到本地 while (true) { // 从文件中读取一行 memset(strfilename,0,sizeof(strfilename)); if (file.fgets(strfilename,100) == false) break; strfilename[strlen(strfilename)-1] = 0; printf("get %s ...",strfilename); // 从远程取文件 if (ftp.get(strfilename,strfilename)==false) { printf("ftp.get(%s) failed.\n",strfilename); break; } printf("ok.\n"); } file.close(); ftp.logout(); return 0; }
这是客户端程序,在本地。连接服务器,获取服务器上的文件,上传本地文件。
/**************************************************************************************/ /* 程序名:_ftp.h,此程序是freecplus框架的ftp客户端工具的类的声明文件。 */ /* 作者:c语言技术网(www.freecplus.net) 日期:20190525。 */ /* */ /* freecplus开源许可协议正文如下: */ /* 版权所有 (c) 2008-2020, 码农有道,c语言技术网(www.freecplus.net)。 */ /* 特此向任何得到本软件副本或相关文档的人授权:被授权人有权使用、复制、修改、 */ /* 合并、出版、发布、散布、再授权和/或贩售软件及软件的副本,及授予被供应人同 */ /* 等权利,只需服从以下义务: */ /* 在软件和软件的所有副本中都必须包含以上版权声明和本许可声明。 */ /* 如果违返,无论在本软件的使用上或其他买卖交易中是否涉及合同,都属于侵权行为, */ /* 我们保留追究的权利。 */ /* freecplus开源许可协议正文结束。 */ /**************************************************************************************/ #ifndef __ftp_h #define __ftp_h #include "_public.h" #include "ftplib.h" class cftp { public: // ftp连接句柄 netbuf *m_ftpconn; // 文件的大小 unsigned int m_size; // 文件的时间modifytime char m_mtime[21]; cftp(); ~cftp(); // 存放login()方法登录失败的原因 bool m_connectfailed; bool m_loginfailed; bool m_optionfailed; void initdata(); // 登录ftp服务器 // in_host 服务器地址和端口,中间用":"分隔,如"192.168.1.1:21" // in_username ftp用户名 // in_password ftp的密码 // in_mode 传输模式,ftplib_passive是被动模式,ftplib_port是主动模式 bool login(const char *in_host,const char *in_username,const char *in_password,const int in_mode=ftplib_passive); // 注销 bool logout(); // 获取ftp服务器上文件的时间 bool mtime(const char *in_remotefilename); // 获取ftp服务器上文件的大小 bool size(const char *in_remotefilename); // 向服务端发送site命令 bool site(const char *in_command); // 改变ftp远程目录 bool chdir(const char *in_remotedir); // 在ftp服务器上创建目录 bool mkdir(const char *in_remotedir); // 删除ftp服务器上的目录 bool rmdir(const char *in_remotedir); // 发送list命令列出ftp服务器目录中的文件,结果保存到本地文件中 // 如果是列出当前目录,in_remotedir用"" , "*" , "."都行。 bool nlist(const char *in_remotedir,const char *out_listfilename); // 发送dir命令列出ftp服务器目录中的文件,结果保存到本地文件中 bool dir(const char *in_remotedir,const char *out_listfilename); // 从ftp服务器上获取文件 // in_remotefilename 待获取的远程文件名 // in_localfilename 本地文件名,可以与in_remotefilename不同 // bcheckmtime 文件传输完成后,是否核对文件传输前后的时间,保证文件的完整性 // 注意,文件在传输的过程中,采用临时文件命名的方法,即在in_localfilename后加".tmp",在传输 // 完成后才正式改为in_localfilename bool get(const char *in_remotefilename,const char *in_localfilename,const bool bcheckmtime=true); // 向ftp服务器发送文件 // in_localfilename 本地待发送的文件名 // in_remotefilename 远程文件名 // bchecksize 文件传输完成后,是否核对本地和远程文件的大小,保证文件的完整性 // 注意,文件在传输的过程中,采用临时文件命名的方法,即在in_remotefilename后加".tmp",在传输 // 完成后才正式改为in_remotefilename bool put(const char *in_localfilename,const char *in_remotefilename,const bool bchecksize=true); // 删除ftp服务器上的文件 bool ftpdelete(const char *in_remotefilename); // 把ftp服务器上的文件改名 bool ftprename(const char *in_srcremotefilename,const char *in_dstremotefilename); // 获取服务器返回信息的最后一条 return a pointer to the last response received char *response(); }; #endif
/**************************************************************************************/ /* 程序名:_ftp.cpp,此程序是freecplus框架的ftp客户端工具的类的定义文件。 */ /* 作者:c语言技术网(www.freecplus.net) 日期:20190525。 */ /* */ /* freecplus开源许可协议正文如下: */ /* 版权所有 (c) 2008-2020, 码农有道,c语言技术网(www.freecplus.net)。 */ /* 特此向任何得到本软件副本或相关文档的人授权:被授权人有权使用、复制、修改、 */ /* 合并、出版、发布、散布、再授权和/或贩售软件及软件的副本,及授予被供应人同 */ /* 等权利,只需服从以下义务: */ /* 在软件和软件的所有副本中都必须包含以上版权声明和本许可声明。 */ /* 如果违返,无论在本软件的使用上或其他买卖交易中是否涉及合同,都属于侵权行为, */ /* 我们保留追究的权利。 */ /* freecplus开源许可协议正文结束。 */ /**************************************************************************************/ #include "_ftp.h" cftp::cftp() { m_ftpconn=0; initdata(); ftpinit(); m_connectfailed=false; m_loginfailed=false; m_optionfailed=false; } cftp::~cftp() { logout(); } void cftp::initdata() { m_size=0; memset(m_mtime,0,sizeof(m_mtime)); } bool cftp::login(const char *in_host,const char *in_username,const char *in_password,const int in_mode) { if (m_ftpconn != 0) { ftpquit(m_ftpconn); m_ftpconn=0; } m_connectfailed=m_loginfailed=m_optionfailed=false; if (ftpconnect(in_host,&m_ftpconn) == false) { m_connectfailed=true; return false; } if (ftplogin(in_username,in_password,m_ftpconn) == false) { m_loginfailed=true; return false; } if (ftpoptions(ftplib_connmode,(long)in_mode,m_ftpconn) == false) { m_optionfailed=true; return false; } return true; } bool cftp::logout() { if (m_ftpconn == 0) return false; ftpquit(m_ftpconn); m_ftpconn=0; return true; } bool cftp::get(const char *in_remotefilename,const char *in_localfilename,const bool bcheckmtime) { if (m_ftpconn == 0) return false; // 创建本地文件目录 mkdir(in_localfilename); char strlocalfilenametmp[301]; memset(strlocalfilenametmp,0,sizeof(strlocalfilenametmp)); snprintf(strlocalfilenametmp,300,"%s.tmp",in_localfilename); // 获取远程服务器的文件的时间 if (mtime(in_remotefilename) == false) return false; // 取文件 if (ftpget(strlocalfilenametmp,in_remotefilename,ftplib_image,m_ftpconn) == false) return false; // 判断文件获取前和获取后的时间,如果时间不同,表示文件已改变,返回失败 if (bcheckmtime==false) { char strmtime[21]; strcpy(strmtime,m_mtime); if (mtime(in_remotefilename) == false) return false; if (strcmp(m_mtime,strmtime) != 0) return false; } // 重置文件时间 utime(strlocalfilenametmp,m_mtime); // 改为正式的文件 if (rename(strlocalfilenametmp,in_localfilename) != 0) return false; // 获取文件的大小 m_size=filesize(in_localfilename); return true; } bool cftp::mtime(const char *in_remotefilename) { if (m_ftpconn == 0) return false; memset(m_mtime,0,sizeof(m_mtime)); char strmtime[21]; memset(strmtime,0,sizeof(strmtime)); if (ftpmoddate(in_remotefilename,strmtime,14,m_ftpconn) == false) return false; addtime(strmtime,m_mtime,0+8*60*60,"yyyymmddhh24miss"); return true; } bool cftp::size(const char *in_remotefilename) { if (m_ftpconn == 0) return false; m_size=0; if (ftpsize(in_remotefilename,&m_size,ftplib_image,m_ftpconn) == false) return false; return true; } bool cftp::site(const char *in_command) { if (m_ftpconn == 0) return false; if (ftpsite(in_command,m_ftpconn) == false) return false; return true; } bool cftp::chdir(const char *in_remotedir) { if (m_ftpconn == 0) return false; if (ftpchdir(in_remotedir,m_ftpconn) == false) return false; return true; } bool cftp::mkdir(const char *in_remotedir) { if (m_ftpconn == 0) return false; if (ftpmkdir(in_remotedir,m_ftpconn) == false) return false; return true; } bool cftp::rmdir(const char *in_remotedir) { if (m_ftpconn == 0) return false; if (ftprmdir(in_remotedir,m_ftpconn) == false) return false; return true; } bool cftp::dir(const char *in_remotedir,const char *out_listfilename) { if (m_ftpconn == 0) return false; if (ftpdir(out_listfilename,in_remotedir,m_ftpconn) == false) return false; return true; } bool cftp::nlist(const char *in_remotedir,const char *out_listfilename) { if (m_ftpconn == 0) return false; // 创建本地文件目录 mkdir(out_listfilename); if (ftpnlst(out_listfilename,in_remotedir,m_ftpconn) == false) return false; return true; } bool cftp::put(const char *in_localfilename,const char *in_remotefilename,const bool bchecksize) { if (m_ftpconn == 0) return false; char strremotefilenametmp[301]; memset(strremotefilenametmp,0,sizeof(strremotefilenametmp)); snprintf(strremotefilenametmp,300,"%s.tmp",in_remotefilename); if (ftpput(in_localfilename,strremotefilenametmp,ftplib_image,m_ftpconn) == false) return false; if (ftprename(strremotefilenametmp,in_remotefilename,m_ftpconn) == false) return false; // 判断已上传的文件的大小与本地文件是否相同,确保上传成功。 if (bchecksize==true) { if (size(in_remotefilename) == false) return false; if (m_size != filesize(in_localfilename)) return false; } return true; } bool cftp::ftpdelete(const char *in_remotefilename) { if (m_ftpconn == 0) return false; if (ftpdelete(in_remotefilename,m_ftpconn) == false) return false; return true; } bool cftp::ftprename(const char *in_srcremotefilename,const char *in_dstremotefilename) { if (m_ftpconn == 0) return false; if (ftprename(in_srcremotefilename,in_dstremotefilename,m_ftpconn) == false) return false; return true; } char *cftp::response() { if (m_ftpconn == 0) return 0; return ftplastresponse(m_ftpconn); }
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
如何在没有core文件的情况下用dmesg+addr2line定位段错误
用QT制作3D点云显示器——QtDataVisualization
网友评论