📄 main_wzm.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 + -