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

📄 main_wzm.cpp

📁 带DirectFB界面的FTP客户端
💻 CPP
字号:
#include "wzm.h"extern char fileinfo[MAXNUM];static DFBDisplay *ds;static const string CMDS = "|quit|exit|list|retr|scwd|lcwd|stor|dele|smkd|srmd|rena|size|type|debg|cler|help|mode|lmkd|lrmd|ldel|mdtm|lsiz|lmdt|abor|lren|";static void ChldHandler( int i ){	string dir = fileinfo;	signal( SIGCHLD, ChldHandler );	ds->DrawDir( dir );}int main( int argc, char *argv[] ){          FtpInterface fi;     char cmd[MAXNUM];     char buffer[MAXNUM];     int  cmdpos;     bool end,begin;	 	 ds = new DFBDisplay(argc,argv);     {     	char ip[MAXNUM],usr[MAXNUM], pwd[MAXNUM];#if defined RELEASE	     		ds->AcceptCmd( " Please Input svip:", ip, true );		if( !strcmp( ip, "quit" ) || !strcmp( ip, "exit" ))			return 0;		ds->AcceptCmd( " Please Input usr :", usr, true );		if( !strcmp( usr, "quit" ) || !strcmp( usr, "exit" ))			return 0;		ds->AcceptCmd( " Please Input pwd :", pwd, false );			if( !strcmp( pwd, "quit" ) || !strcmp( pwd, "exit" ))			return 0;#endif#if defined DEBUGsprintf( ip, "192.168.198.1" );sprintf( usr, "wzm" );sprintf( pwd, "wzm012" );#endif		if( !fi.LogInServ( ip, usr, pwd ))    		sprintf( cmd, "cler" );    	else    	{    		ds->AcceptCmd( " Connect Server error.", NULL, true );    		sleep(1);    		return 1;    	}     }          signal( SIGCHLD, ChldHandler );             end = true;     	 while( end )	 {	 		 	begin = false;	    sprintf( buffer, "帮助:按[F1]键或输入命令[help]。" );	    memset( cmd+strlen(cmd), '\0', MAXNUM-strlen(cmd) );	    cmdpos = CMDS.find( cmd, 0, 4 );	    	    switch( cmdpos )	    {	    	case QUIT:	    	case EXIT:	    		end = false;	    		begin = true;	    		break;	    			    	case LIST:	    		if( !fi.List( cmd + 5 ) )				{					string info;										if( ds->DrawFile( cmd + 5, 0, true ) )						sprintf( buffer, "输出服务文件信息失败!" );					else					{						info = fi.GetInfo();											if( ds->DrawDir( info ) )							sprintf( buffer, "输出目录信息失败!" );						else if( ds->DrawInfo( 0 ) )							sprintf( buffer, "输出本地文件信息失败!" );					}				}				else					sprintf( buffer, " 获取服务器文件列表出错。" );				break;							case RETR:				if(fi.GetFile( cmd + 5 ))					sprintf( buffer, " 下载文件[%s]出错。", cmd+5 );				break;							case SCWD:				if( fi.Cwd( cmd + 5 ) )					sprintf( buffer, " 改变服务器的工作目录[%s]出错。", cmd+4);				else				{					sprintf( cmd, "list" );					begin = true;;				}				break;							case LCWD:				{					chdir( cmd + 5 );										string dir="";					if( ds->DrawDir( dir ) )						sprintf( buffer, "输出目录信息失败!" );					else if( ds->DrawInfo( 0 ) )						sprintf( buffer, "输出本地文件信息失败!" );				}				break;							case STOR:				if(fi.PutFile( cmd + 5 ))					sprintf( buffer, " 上传文件[%s]出错。", cmd+5 );				break;							case DELE:				if(fi.DeleFile( cmd + 5 ))					sprintf( buffer, " 删除文件[%s]出错。", cmd+5 );				else				{					sprintf( cmd, "list" );					begin = true;				}				break;							case SMKD:				if(fi.Mkd( cmd + 5 ))					sprintf( buffer, " 创建目录[%s]出错。", cmd+4 );				else				{					sprintf( cmd, "list" );					begin = true;				}				break;							case SRMD:				if(fi.Rmd( cmd + 5 ))					sprintf( buffer, " 删除目录[%s]出错。", cmd+4 );				else				{					sprintf( cmd, "list" );					begin = true;				}				break;							case RENA:				if(fi.ReName( cmd + 5 ))					sprintf( buffer, " 重命名文件[%s]出错。", cmd+3 );				else				{					sprintf( cmd, "list" );					begin = true;				}				break;							case SIZE:				{					char buf[MAXNUM];										if(fi.Size( cmd+5,buf ))						sprintf( buffer, " 获取文件[%s]大小出错。", cmd+5 );					else						sprintf( buffer, " 文件[%s]大小为[%s]。", cmd+5, buf );				}				break;							case TYPE:				{					int ret;					char buf[6];									ret = fi.SwitchType( cmd[5] );					if( cmd[5] == 'a' )						sprintf( buf, "ASC" );					else						sprintf( buf, "BIN" );											if( ret )											sprintf( buffer, " 改为[%s]传输类型出错。", buf );					else						sprintf( buffer, " 改为[%s]传输类型成功。", buf );				}				break;							case DEBG:				if( ds->DrawFile( DEBUGFILE, 0, false ) )					sprintf( buffer, " 输出日志文件[%s]失败!", DEBUGFILE );				else					sprintf( buffer, " 输出日志文件[%s]成功![list]或[F1]返回!", DEBUGFILE );				break;							case CLER:				sprintf( buffer, "cat /dev/null > %s", DEBUGFILE );				if( system(buffer) != 0 )					sprintf( buffer, " 清理日志文件[%s]失败!", DEBUGFILE );				else				{					sprintf( cmd, "list" );					begin = true;				}				break;							case HELP:				if( access( HELPFILE, R_OK ) )					sprintf( buffer, " 这里没有help文件!" );				else				{						if( ds->DrawFile( HELPFILE, 0, false ) != 0 )						sprintf( buffer, " 输出帮助文件失败!" );					else						sprintf( buffer, " 输出帮助文件成功![list]或[F1]返回!" );				}				break;							case MODE:				{					int ret;					char buf[6];										ret = fi.SwitchMode( cmd[5] );										if( cmd[5] == 'a' )						sprintf( buf, "PASV" );					else						sprintf( buf, "PORT" );										if( ret )						sprintf( buffer, " 修改传输模式[%s]失败!", buf );					else 						sprintf( buffer, " 修改传输模式[%s]成功!", buf );				}				break;							case LMKD:				if( strlen( cmd + 5 ) <= 0 )					sprintf( buffer, " 没有输入要创建的目录名!" );				else				{					if( mkdir( cmd+5, 0666 ) < 0 )						sprintf( buffer, " 创建本地目录[%s]失败!", cmd+5 );					else					{						sprintf( cmd, "lcwd" );						begin = true;					}				}				break;							case LRMD:				if( strlen( cmd + 5 ) <= 0 )					sprintf( buffer, " 没有输入要删除的目录名!" );				else				{					if( rmdir( cmd+5 ) < 0 )						sprintf( buffer, " 删除本地目录[%s]失败!", cmd+5 );					else					{						sprintf( cmd, "lcwd" );						begin = true;					}				}				break;							case LDEL:				if( strlen( cmd + 5 ) <= 0 )					sprintf( buffer, " 没有输入要删除的文件名!" );				else				{					if( unlink( cmd+5 ) < 0 )						sprintf( buffer, " 删除本地文件[%s]失败!", cmd+5 );					else					{						sprintf( cmd, "lcwd" );						begin = true;					}				}				break;							case MDTM:				{					char buf[MAXNUM];										if( fi.Mdtm( cmd+5, buf ))						sprintf( buffer, " 获取[%s]修改时间出错。", cmd+5 );					else					{						struct tm time;												strptime( buf, "%Y%m%d%H%M%S", &time );						sprintf( buffer, " [%s]修改时间为[%s]。", cmd+5, asctime( &time ) );					}				}				break;							case LSIZ:				if( access( cmd + 5, R_OK ) )					sprintf( buffer, " 这里没有[%s]文件!", cmd + 5 );				else				{						struct stat mode;										if( stat( cmd + 5, &mode ) < 0 )						sprintf( buffer, " 获取文件[%s]大小出错。", cmd + 5 );					else						sprintf( buffer, " 文件[%s]大小为[%d]。", cmd + 5, mode.st_size );				}				break;							case LMDT:				if( access( cmd + 5, R_OK ) )					sprintf( buffer, " 这里没有[%s]文件!", cmd + 5 );				else				{						struct stat mode;										if( stat( cmd + 5, &mode ) < 0 )						sprintf( buffer, " 获取[%s]修改时间出错。", cmd + 5 );					else						sprintf( buffer, " [%s]修改时间为[%s]。", cmd + 5, ctime(&mode.st_mtime) );				}				break;							case ABOR:				fi.Abort();				break;							case LREN:				{						char *p;					p = strtok(cmd , " ");					p = strtok( NULL , " ");					p = strtok( NULL , " ");										if( rename( cmd + 5, p ) < 0 )						sprintf( buffer, " 重命名[%s]为[%s]出错。", cmd + 5, p );					else					{						sprintf( cmd, "lcwd" );						begin = true;					}										}				break;							default:				sprintf( buffer, " 输入help获得帮助!");				break;	    }				if( !begin )			while( !ds->AcceptCmd( buffer, cmd, true ) );	 } 	 	 delete ds;     return 0;}

⌨️ 快捷键说明

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