// FileToolsV20120605.cpp : Defines the entry point for the application.////用vc6.0建立一个win32简单应用程序#include "stdafx.h"#include#include #include #include #include #include #include ////调试开关://#define FLAG_DEBUG////要删除的目录#define FIND_FILE_PATH "C:\\Program Files"//要删除的文件类型#define FIND_FILE_TYPE ".exe"//#define FILE_NAME_TYPE "*.*"//最大的文件查找字节数#define MAX_FIND_PATH 1000//函数返回值:#define RTN_OK (0)#define RTN_ERR (1)//休眠秒数#define SLEEP_SECOND 100//LOGO字符串#define STR_LOGO "\┌---------------------------------------------------------------┐\n\│Files Toos [版本 FTV01R01C01] │ \n\│ Build By BinG @2012.3, Email:zww0815@gmail.com. │ \n\│ 版权所有 (c) 2012 Zkf39219。保留所有权利。 │ \n\└---------------------------------------------------------------┘\n" //帮助信息字符串 #define STR_HELP ""\ " 查看帮助\n"\ "m 修改配置信息\n"\ "q 退出\n"\ "d 打开调试开关\n"\ "c 清屏\n"\ "t 测试\n"\ "-----------------------------------\n"\ "自己输入:y,自己不想输入: <任意键> \n"//往屏幕打印信息 #define PRINTTOSCR(str) do\{\printf("%s",str);\} while (0);enum{ FLAG_ZERO, //0 :默认0 FLAG_VIEW_FILE,//1 :查看文件 FLAG_DELETE, //2 :删除文件 FLAG_INIT_OK, //3 :全局变量初始化标志 FLAG_INIT_NO, //4 :全局变量没有初始化 FLAG_ONE_LOG, //5 :打开程序只能有一个log标志 FLAG_FILENAME_TIME, //6 :文件以时间命令。 FLAG_FILENAME_ZHID, //7 :文件指定命名};//-----------------------------------------------------------// 函数声明//-----------------------------------------------------------#ifdef __cplusplusextern "C" { #endif //__cplusplus void InitGlobalVar(); void PrintLocalTime(void* flag); void fOpenFileFp(FILE** fp); void fCloseFileFp(FILE** fp); void VisitAllFiles(char * lpPath); void GetCurSysTime(char* str); void FileOptions(); void CloseOrFreeGlobalVar(); void DebugAndPrintAllGlobalVar(); int FileOpt(); void ExecAppByCmd();#ifdef __cplusplus }#endif //__cplusplus#ifndef _USE_OLD_IOSTREAMSusing namespace std;#endif// maximum mumber of lines the output console should havestatic const WORD MAX_CONSOLE_LINES = 500;//-----------------------------------------------------------// 全局变量声明(定义) //-----------------------------------------------------------//全局的文件计数与文件清理计数static long g_lCheckFileNumber;static long g_lCheckOkFileNumber;static long g_lClearFileNumber;static int g_flagDeleteFile;static int g_flagOnlyOneLog = FLAG_ONE_LOG;////用于全局初始化函数中的是否初始化标志。//初始化时置1//调用CloseOrFreeGlobalVar函数时重新置0//默认值:FLAG_INIT_NO 0static int g_flagInitFuncIsFinish=FLAG_INIT_NO;////全局的指针变量/* 定义全局的FILE类型指针,供写日志 */FILE* g_fpLog;FILE* g_fpCheckOK;///定义全局的查找文件路径及类型char g_strFindFilePath[MAX_FIND_PATH];char g_strFindFileType[10];//全局的时间字符串char g_pStrTime[50];//全局的文件路径名字符串char g_strTemFileName[80];//函数访问次数int g_iCount = 0;void RedirectIOToConsole(){ int hConHandle; long lStdHandle; CONSOLE_SCREEN_BUFFER_INFO coninfo; FILE *fp; // 分配一个控制台程序 AllocConsole(); // 设置足够大的屏幕缓存可以让我们滑动文本 GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &coninfo); // 设置控制台屏幕的高度 coninfo.dwSize.Y = MAX_CONSOLE_LINES; // 设置控制台屏幕缓存大小 SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE), coninfo.dwSize); // 获取标准输出句柄 lStdHandle = (long)GetStdHandle(STD_OUTPUT_HANDLE); //打开标准输出句柄,类似打开文件的方式如fopen,返回一个文件描述符 hConHandle = _open_osfhandle(lStdHandle, _O_TEXT); // 以可写的方式打开 fp = _fdopen( hConHandle, "w" ); *stdout = *fp; setvbuf( stdout, NULL, _IONBF, 0 ); // redirect unbuffered STDIN to the console lStdHandle = (long)GetStdHandle(STD_INPUT_HANDLE); hConHandle = _open_osfhandle(lStdHandle, _O_TEXT); fp = _fdopen( hConHandle, "r" ); *stdin = *fp; setvbuf( stdin, NULL, _IONBF, 0 ); // redirect unbuffered STDERR to the console lStdHandle = (long)GetStdHandle(STD_ERROR_HANDLE); hConHandle = _open_osfhandle(lStdHandle, _O_TEXT); fp = _fdopen( hConHandle, "w" ); *stderr = *fp; setvbuf( stderr, NULL, _IONBF, 0 ); // make cout, wcout, cin, wcin, wcerr, cerr, wclog and clog // point to console as well ios::sync_with_stdio();} void test(){ int iVar; RedirectIOToConsole(); // test stdio fprintf(stdout, "Test output to stdout\n"); fprintf(stderr, "Test output to stderr\n"); fprintf(stdout, "Enter an integer to test stdin: "); scanf("%d", &iVar); printf("You entered %d\n", iVar); //test iostreams cout << "Test output to cout" << endl; cerr << "Test output to cerr" << endl; clog << "Test output to clog" << endl; cout << "Enter an integer to test cin: "; cin >> iVar; cout << "You entered " << iVar << endl;} int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { // TODO: Place code here. //test(); RedirectIOToConsole(); (void)FileOpt(); return 0; }//-----------------------------------------------------------// main函数 //-----------------------------------------------------------#if 1int FileOpt(){ #if 1 InitGlobalVar(); FileOptions(); #ifdef FLAG_DEBUG DebugAndPrintAllGlobalVar(); #endif CloseOrFreeGlobalVar(); #endif return 0; }#endif // 0//-----------------------------------------------------------// 函数实现 //-----------------------------------------------------------/************************************************************************//*说明: 同时打印输出到文件及屏幕上 *//* stream: 文件句柄,即文件描述符 *//* format: 格式字符串 *//* Build by zkf39219@2012.3 *//************************************************************************/void WriteFormatted (FILE * stream, char * format, ...){ /*BEGIN: Modify by zkf39219 @ 2012.511 for pointer NULL error */ if (NULL == stream) { printf("FILE pointer init error:IS NULL!!!\n"); return; } /*END: Modify by zkf39219 @ 2012.5.11 for pointer NULL error */ //获取时间信息 GetCurSysTime(g_pStrTime); va_list args; va_start (args, format); vfprintf (stream, format, args); vprintf (format, args); va_end (args); }///////功能://1.打开文件句柄//2.标志不同输出文件不同://3.标志flag为FLAG_FILENAME_TIME:1时:文件名用时间命名//4.标志flag为FLAG_FILENAME_ZHID:2时:指定命名void fOpenFileFp(FILE** fp, int flag)//标志,1:文件名用时间命名,2:指定命名 { if (NULL == *fp) { *fp = (FILE*)malloc(sizeof(FILE)); if (NULL == *fp) { printf("malloc error!!!\n"); return; } } if (FLAG_ONE_LOG == g_flagOnlyOneLog) { char strTemFileName[80]; GetCurSysTime(strTemFileName); strcat(strTemFileName,".log"); strcpy(g_strTemFileName,strTemFileName); } if (FLAG_FILENAME_TIME == flag && (*fp = fopen(g_strTemFileName, "a")) == NULL) { WriteFormatted(g_fpLog,"Can't open %s \n", g_strTemFileName); exit(-1); } else if(FLAG_FILENAME_ZHID == flag && (*fp = fopen("OutPut.txt", "a")) == NULL) { WriteFormatted(g_fpLog,"Can't open %s \n", g_strTemFileName); exit(-1); } g_flagOnlyOneLog++; }//调试时打印所有全局变量void DebugAndPrintAllGlobalVar(){ WriteFormatted(g_fpLog, "g_lCheckFileNumber :Ox%08x\n\g_lCheckOkFileNumber :Ox%08x\n\g_lClearFileNumber :Ox%08x\n\g_flagDeleteFile :Ox%08x\n\g_fpLog :Ox%08x\n\g_fpCheckOK :Ox%08x\n\g_pStrTime :Ox%08x\n\g_strFindFilePath :Ox%08x\n\g_strFindFileType :Ox%08x\n\g_iCount :Ox%08x\n\g_flagInitFuncIsFinish:Ox%08x\n--->%s\n",g_lCheckFileNumber,g_lCheckOkFileNumber,g_lClearFileNumber,g_flagDeleteFile,g_fpLog,g_fpCheckOK,g_pStrTime,g_strFindFilePath,g_strFindFileType,g_iCount,g_flagInitFuncIsFinish,(g_flagInitFuncIsFinish==FLAG_INIT_NO)?"内存已释放":"危险:内存没有释放"); //释放指针g_fpLog的前提是标志g_flagInitFuncIsFinish置FLAG_INIT_NO //即其它内存已经释放 if (FLAG_INIT_NO == g_flagInitFuncIsFinish) { fCloseFileFp(&g_fpLog); printf("g_fpLog :Ox%08x\n",g_fpLog); } }////功能:// 初始化全局变量// 为了避免重复初始化,该函数初始化完成后置标志为FLAG_INIT_OKvoid InitGlobalVar(){ //先判断是否已经初始化,已初始化直接返回 if (FLAG_INIT_OK == g_flagInitFuncIsFinish) { return; } g_lCheckFileNumber = 0; g_lCheckOkFileNumber = 0; g_lClearFileNumber = 0; g_flagDeleteFile = FLAG_VIEW_FILE; g_fpLog = NULL; g_fpCheckOK = NULL; /* 初始化全局变量 g_fpLog */ if (NULL == g_fpLog) { fOpenFileFp(&g_fpLog,FLAG_FILENAME_TIME); } /* 初始化全局变量 fp */ if (NULL == g_fpCheckOK) { fOpenFileFp(&g_fpCheckOK,FLAG_FILENAME_ZHID); } /* 初始化全局变量 */ GetCurSysTime( g_pStrTime ); //strcpy(g_strFindFilePath,FIND_FILE_PATH); //strcpy(g_strFindFileType,FIND_FILE_TYPE); g_iCount = 0; g_flagInitFuncIsFinish = FLAG_INIT_OK; }void FreePTime(PSYSTEMTIME pTime){ /* 一定要进行下面判断,否则会造成重复释放NULL地址而崩溃 */ if (NULL != pTime) { free(pTime); pTime = NULL; } }//打开文件句柄void fCloseFileFp(FILE** fp){ if (*fp) { fclose(*fp); *fp = NULL; } }/////函数功能://1.对全局的指针进行释放,并指向NULL//2.对全局变量置默认值//3.如果发现初始化标志没有OK,返回void CloseOrFreeGlobalVar(){ if (FLAG_INIT_NO == g_flagInitFuncIsFinish ) { return; } /* 调试时不在这释放日志内存指针g_fpLog,由调试函数释放 */ #ifndef FLAG_DEBUG fCloseFileFp(&g_fpLog); #endif fCloseFileFp(&g_fpCheckOK); g_lCheckFileNumber = 0; g_lCheckOkFileNumber = 0; g_lClearFileNumber = 0; g_flagDeleteFile = FLAG_VIEW_FILE; //下面两行存在重大隐患:指针虽然指向NULL,但其内存空间没有释放,造成内存泄漏 //fCloseFileFp函数里有指向NULL,所以这里不要再指向NULL. //g_fpLog = NULL; //g_fpCheckOK = NULL; g_flagInitFuncIsFinish = FLAG_INIT_NO; #ifdef FLAG_DEBUG //上面没有释放的句柄应该在这里面释放 DebugAndPrintAllGlobalVar(); #endif }/////* Modify by zengwenwu @ 2012-3-19 :增加一标志,提供不同打印要求 *///1:打印长时间//0:短时间//-1:不打印,相当于只对pTime做赋值void GetCurSysTime(char* str){ LPSYSTEMTIME pstTemSysTime = NULL; pstTemSysTime = (LPSYSTEMTIME)malloc( sizeof(SYSTEMTIME) ); if ( NULL == pstTemSysTime ) { WriteFormatted(g_fpLog,"SYSTEMTIME malloc is err\n" ); return; } memset(pstTemSysTime,0,sizeof(LPSYSTEMTIME)); GetLocalTime( pstTemSysTime ); sprintf((char*)str,"%04d-%02d-%02d %02d_%02d_%02d %03d", pstTemSysTime->wYear, pstTemSysTime->wMonth, pstTemSysTime->wDay, pstTemSysTime->wHour, pstTemSysTime->wMinute, pstTemSysTime->wSecond, pstTemSysTime->wMilliseconds ); }///////Function:// Visit all folders and files ////Paremeter:// char *lpPath -- path of file////Return:// void//void VisitAllFiles(char * lpPath){ Sleep(SLEEP_SECOND); char szFind[MAX_PATH]; WIN32_FIND_DATA FindFileData; char chTemPath[MAX_FIND_PATH]; strcpy(chTemPath,lpPath); int n = strlen(chTemPath); if (chTemPath[n-1] == '\\' || chTemPath[n-1] == '/') { WriteFormatted(g_fpLog,"%s\n",chTemPath); chTemPath[n-1] = '\0'; WriteFormatted(g_fpLog,"%s\n",chTemPath); } strcpy(szFind,chTemPath); strcat(szFind,"\\*.*"); // WriteFormatted(g_fpLog,"%s\n",chTemPath);// WriteFormatted(g_fpLog,"%d %d\n",'\\','/'); /* 对全局时间g_pTime变量赋值 */ if (0 == g_iCount++) { WriteFormatted(g_fpLog,"查找%s下%s类型的文件\n",g_strFindFilePath,g_strFindFileType); WriteFormatted(g_fpLog,"BEGIN-------------------------------------------------%s\n",g_pStrTime); WriteFormatted(g_fpCheckOK,"%s\n","\n\n"); WriteFormatted(g_fpCheckOK,"查找目录%s下%s类型的文件\n",g_strFindFilePath,g_strFindFileType); WriteFormatted(g_fpCheckOK,"BEGIN-------------------------------------------------%s\n",g_pStrTime); } /*printf("+------进入目录--->\n+[%s]\n\r",chTemPath);*/ WriteFormatted(g_fpLog,"+------进入目录--->\n+[%s]\n",chTemPath); HANDLE hFind=::FindFirstFile(szFind,&FindFileData); if(INVALID_HANDLE_VALUE == hFind) { WriteFormatted(g_fpLog,"<%s>No %s file found\n",g_pStrTime,g_strFindFileType); return; } while(TRUE) { //If director, visit all sub-folders if((FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) { g_lCheckFileNumber++; if(FindFileData.cFileName[0]!='.') { char szFile[MAX_PATH]; strcpy(szFile,lpPath); strcat(szFile,"\\"); /*strcat(chTemPath,szFile);*/ strcat(szFile,FindFileData.cFileName); VisitAllFiles(szFile); } } else { //Judge if TYPE file g_lCheckFileNumber++; /*printf(" -%s\n",FindFileData.cFileName);*/ int len = strlen(FindFileData.cFileName); int iStrLen = strlen(g_strFindFileType); //除去目录,共检查文件数 const char *p = (char *)&FindFileData.cFileName[len-iStrLen]; //case insentive! if ( (0 == strcmp("*",g_strFindFileType)) || (0 == strcmp("*.*",g_strFindFileType)) ) { //查看所有目录文件: g_lCheckOkFileNumber++; //if exe file, check it char strFileName[MAX_PATH]; strcpy(strFileName,lpPath); strcat(strFileName,"\\"); strcat(strFileName,FindFileData.cFileName); WriteFormatted(g_fpLog,"<%s>已检查文件数:%ld,符合条件数:%ld,刚检查到的文件是:\n%s\n", g_pStrTime, g_lCheckFileNumber, g_lCheckOkFileNumber, strFileName); fprintf(g_fpCheckOK,"<%s> %s\n", g_pStrTime, strFileName); } else if ((_stricmp(p, g_strFindFileType) == 0)) { g_lCheckOkFileNumber++; //if exe file, check it char strFileName[MAX_PATH]; strcpy(strFileName,lpPath); strcat(strFileName,"\\"); strcat(strFileName,FindFileData.cFileName); WriteFormatted(g_fpLog,"<%s>已检查文件数:%ld,符合条件数:%ld,刚检查到的文件是:\n%s\n", g_pStrTime, g_lCheckFileNumber, g_lCheckOkFileNumber, strFileName); fprintf(g_fpCheckOK,"<%s> %s\n", g_pStrTime, strFileName); /* 置删除标志时,删除文件 */ /*if (CheckWHVirus(fp))*/ if (g_flagDeleteFile == FLAG_DELETE) { /*PrintLocalTime(g_pStrTime);*/ /*ClearVirus(fp, strFileName);*/ //fp closed in the function /*printf("Virus Found! %s and cleared\r\n", strFileName);*/ /* 去只读 */ SetFileAttributes(strFileName,FILE_ATTRIBUTE_NORMAL); /* Long,非零表示成功,零表示失败。会设置GetLastError */ //if (DeleteFile(strFileName)) if (!remove(strFileName)) { g_lClearFileNumber++; /*printf("Delete file: %s successfully,已清除文件数:%ld.\n", strFileName,g_lClearFileNumber);*/ WriteFormatted(g_fpLog,"<%s>---Delete file: %s successfully,已清除文件数:%ld.\n", g_pStrTime,strFileName,g_lClearFileNumber); } else { /*printf("Delete file: %s failed!\n", strFileName);*/ WriteFormatted(g_fpLog,"<%s>---Delete file: %s failed!\n", g_pStrTime,strFileName); } } /*system("cls");*/ /*Sleep(SLEEP_SECOND);*/ }} //Find next fileif(!FindNextFile(hFind,&FindFileData)){ // printf("【OK,There is not %s type file in PATH %s】\n",TYPE,chTemPath); // fprintf(g_fpLog,"---------------->【OK,There is not %s type file any more in PATH %s】\n",TYPE,chTemPath); break; }} /*GetCurSysTime(g_pStrTime);*//*fprintf(g_fpLog,"END---------------------------------------------------%s\n",g_pStrTime);*/FindClose(hFind);}//从配置文件中读取配置信息://PATH:需要进行查找/删除的路径名//TYPE:需要进行查找的文件类型名称//DORV:是删除还是查看:0查看,1删除void ReadConfigFromFile(){ FILE * fpConf = NULL; char strPathTemp[100]; char strTypeTemp[10]; /*char strCurTime[50];*/ int flagDelOrView = 0; char strCfgFilePath[100]; memset(strPathTemp,0,sizeof(strPathTemp)); memset(strTypeTemp,0,sizeof(strTypeTemp)); memset(strCfgFilePath,0,sizeof(strTypeTemp)); GetCurrentDirectory(MAX_FIND_PATH,strCfgFilePath); if (NULL == (fpConf = fopen("config.cfg","r"))) { WriteFormatted(g_fpLog,"Read config file error!!!->%s\n",strCfgFilePath); WriteFormatted(g_fpLog,"获取当前路径为:%s\n",strCfgFilePath); strcat(strCfgFilePath,"\\"); strcat(strCfgFilePath,"config.cfg"); if (NULL == (fpConf = fopen(strCfgFilePath,"w"))) { WriteFormatted(g_fpLog,"Read config file error!!!->%s\n",strCfgFilePath); exit(0); } } GetCurSysTime(g_pStrTime); fscanf(fpConf,"PATH=%s\n",strPathTemp); fscanf(fpConf,"TYPE=%s\n",strTypeTemp); fscanf(fpConf,"DORV=%d\n",&flagDelOrView); WriteFormatted(g_fpLog,"\n读取的文件配置信息:\n",g_pStrTime); WriteFormatted(g_fpLog,"PATH=%s\n",strPathTemp); WriteFormatted(g_fpLog,"TYPE=%s\n",strTypeTemp); WriteFormatted(g_fpLog,"DORV=%d\n",flagDelOrView); if (!(strcmp(strPathTemp,"") && strcmp(strTypeTemp,""))) { WriteFormatted(g_fpLog,"\n配置为空,请修改配置文件\n"); return; } strcpy(g_strFindFilePath,strPathTemp); strcpy(g_strFindFileType,strTypeTemp); g_flagDeleteFile = flagDelOrView; WriteFormatted(g_fpLog,"\n全局配置信息:\n",g_pStrTime); WriteFormatted(g_fpLog,"g_strFindFilePath=%s\n",g_strFindFilePath); WriteFormatted(g_fpLog,"g_strFindFileType=%s\n",g_strFindFileType); WriteFormatted(g_fpLog,"g_flagDeleteFile=%d\n",g_flagDeleteFile); fCloseFileFp(&fpConf); WriteFormatted(g_fpLog,"Read config successfully!!!\n"); //Sleep(3000);}//保存配置到配置文件中://PATH:需要进行查找/删除的路径名//TYPE:需要进行查找的文件类型名称//DORV:是删除还是查看:0查看,1删除void SaveConfigToFile(){ FILE * fpConf = NULL; char strPathTemp[100]; char strTypeTemp[10]; /*char strCurTime[50];*/ int flagDelOrView = 0; WriteFormatted(g_fpLog,"\n保存配置信息:\n"); memset(strPathTemp,0,sizeof(strPathTemp)); memset(strTypeTemp,0,sizeof(strTypeTemp)); if (NULL == (fpConf = fopen("config.cfg","w"))) { WriteFormatted(g_fpLog,"Read config file error !!!\n"); return; } if (!(strcmp(g_strFindFilePath,"") && strcmp(g_strFindFileType,""))) { WriteFormatted(g_fpLog,"配置为空,请重新配置\n"); return; } //将配置信息打印出来 //保存到配置文件中 /*fprintf(g_fpLog,"<%s>全局配置信息:\n",g_pStrTime);*/ fprintf(fpConf,"PATH=%s\n",g_strFindFilePath); fprintf(fpConf,"TYPE=%s\n",g_strFindFileType); fprintf(fpConf,"DORV=%d\n",g_flagDeleteFile); //将保存后的信息写到日志及标准输出中 WriteFormatted(g_fpLog,"保存配置后的配置信息:\n",g_pStrTime); WriteFormatted(g_fpLog,"PATH=%s\n",g_strFindFilePath); WriteFormatted(g_fpLog,"TYPE=%s\n",g_strFindFileType); WriteFormatted(g_fpLog,"DORV=%d\n",g_flagDeleteFile); fCloseFileFp(&fpConf); WriteFormatted(g_fpLog,"Save config successfully!!!\n"); //Sleep(3000);}void ModifyCfg(){ char ch; while (1) { fflush(stdin); flushall(); WriteFormatted(g_fpLog,"<%s>[m]",g_pStrTime); ch = getch(); WriteFormatted(g_fpLog,"%c\n",ch); if (13 == ch) { continue; } else if ('1' == ch) { WriteFormatted(g_fpLog,"\n请输入路径:"); scanf("%s",g_strFindFilePath); continue; } else if ('2' == ch) { WriteFormatted(g_fpLog,"\n请输入需要查找的文件类型:"); scanf("%s",g_strFindFileType); continue; } else if ('3' == ch) { WriteFormatted(g_fpLog,"\n请输入是查看还是删除:0:查看,2:删除\n"); scanf("%d",&g_flagDeleteFile); //如果不是删除或查看的选择,默认为查看 if ((g_flagDeleteFile != FLAG_DELETE) && (g_flagDeleteFile != FLAG_VIEW_FILE)) { g_flagDeleteFile = FLAG_VIEW_FILE; } continue; } else if ('q' == ch || 'e' == ch) { //SaveConfigToFile(); break; } else if ('s' == ch) { //保存配置到配置文件中 SaveConfigToFile(); /*system("dir");*/ } else if ('r' == ch) { //从文件中读取配置 ReadConfigFromFile(); /*system("dir");*/ } else if ('?' == ch || 'h' == ch) { //WriteFormatted(g_fpLog,"\n\n"); WriteFormatted(g_fpLog,"%s\n","\n修改配置文件:\n1.路径 \n2.文件类型 \n3.删除(0-查看,2-删除) \nq,e退出\n"); continue; } else { WriteFormatted(g_fpLog,"\nInput error,please check it.\n\n"); continue; } } // if(!strcmp("",g_strFindFilePath) || !strcmp("",g_strFindFileType)) // { // WriteFormatted(g_fpLog,"竟然不输入路径和类型,想搞死我啊!!!\n"); // /*GetCurrentDirectory(MAX_FIND_PATH,g_strFindFilePath);*/ // // memset(g_strFindFileType,0,10); // // strcpy(g_strFindFileType,"log"); // // ReadConfigFromFile(); // } #ifdef FLAG_DEBUG WriteFormatted(g_fpLog, "g_strFindFilePath:%s\n,g_strFindFileType:%s\n,g_flagDeleteFile:%d\n", g_strFindFilePath, g_strFindFileType, g_flagDeleteFile);#endif //FLAG_DEBUG }void My_ShellExecute( HWND hwnd, LPCTSTR lpOperation, LPCTSTR lpFile, LPCTSTR lpParameters, LPCTSTR lpDirectory, INT nShowCmd ){ HINSTANCE hRet = ShellExecute( hwnd, lpOperation, lpFile, lpParameters, lpDirectory, nShowCmd ); int iRet = (int)hRet; switch(iRet) { case 0: WriteFormatted(g_fpLog,"The operating system is out of memory or resources."); break; case ERROR_FILE_NOT_FOUND: WriteFormatted(g_fpLog,"The specified file was not found."); break; case ERROR_PATH_NOT_FOUND: WriteFormatted(g_fpLog,"The specified file was not found."); break; case ERROR_BAD_FORMAT: WriteFormatted(g_fpLog,"The specified file was not found."); break; case SE_ERR_ACCESSDENIED: WriteFormatted(g_fpLog,"The specified file was not found."); break; case SE_ERR_ASSOCINCOMPLETE: WriteFormatted(g_fpLog,"The file name association is incomplete or invalid."); break; case SE_ERR_DDEBUSY: WriteFormatted(g_fpLog,"The Dynamic Data Exchange (DDE) transaction could not be completed because other DDE transactions were being processed."); break; case SE_ERR_DDEFAIL: WriteFormatted(g_fpLog,"The DDE transaction failed."); break; case SE_ERR_DDETIMEOUT: WriteFormatted(g_fpLog,"The DDE transaction could not be completed because the request timed out."); break; case SE_ERR_DLLNOTFOUND: WriteFormatted(g_fpLog,"The specified DLL was not found."); break; default:#ifdef FLAG_DEBUG //失败返回值会小于或等于32 if (iRet>32) { WriteFormatted(g_fpLog,"\n-----[Function]:My_ShellExecute successfully:%d-----\n",iRet); } else { WriteFormatted(g_fpLog,"===================Other:%d=======================",iRet); }#endif //FLAG_DEBUG break; }}void FileOptions(){#if 0 printf("----------------------------------------------\n"); printf("DeleteFile.exe (argv[1]) (argv[2]) (argv[3]) :\n"); printf("argv[1]:绝对路径名(最后不加\\\n"); printf("argv[2]:要查找or删除的文件类型\n"); printf("argv[3]:标志:2--删除 其它--查看\n");#endif char ch; WriteFormatted(g_fpLog,STR_LOGO); while(1) { InitGlobalVar();#ifdef FLAG_DEBUG DebugAndPrintAllGlobalVar();#endif //PRINTTOSCR(STR_HELP); //WriteFormatted(g_fpLog,STR_HELP); WriteFormatted(g_fpLog,"<%s>",g_pStrTime); flushall(); fflush(stdin); ch = getch(); WriteFormatted(g_fpLog,"%c\n",ch); if ('y' == ch || 'Y' == ch) { ModifyCfg(); WriteFormatted(g_fpLog,"即将要查找%s下%s类型的文件了哦\n",g_strFindFilePath,g_strFindFileType); Sleep(3000); VisitAllFiles(g_strFindFilePath); //CloseOrFreeGlobalVar(); } else if (ch =='q' || ch == 'e' || ch == 'Q' || ch == 'q') { int ret = MessageBoxA(NULL,"确定退出","确定退出 ",MB_YESNO); /*printf("--------------ret=%d-------------\n",ret);*/ if (IDNO == ret) { WriteFormatted(g_fpLog," <你刚才选择了否,继续> \n"); continue; } WriteFormatted(g_fpLog," <你刚才选择了是,退出> \n"); flushall(); //CloseOrFreeGlobalVar(); break; } else if (ch == 'm') { ModifyCfg(); } else if ('d' == ch) { DebugAndPrintAllGlobalVar(); } else if ('?' == ch) { WriteFormatted(g_fpLog,STR_HELP); } else if ('r' == ch) { WriteFormatted(g_fpLog,"ExecAppByCmd..\n"); ExecAppByCmd(); WriteFormatted(g_fpLog,"ExecAppByCmd..Finish.\n"); } else if ('s' == ch) { SaveConfigToFile(); } else if ('t' == ch) { WriteFormatted(g_fpLog,"\n太懒了,这个是用做测试用的,大哥\n"); Sleep(2000); ReadConfigFromFile(); VisitAllFiles(g_strFindFilePath); } else if ('c' == ch) { //清屏 system("cls"); } else { //空格与回车,继续 if (ch == ' ' || ch == 13) { continue; } WriteFormatted(g_fpLog,"Input error,please check it.\n"); } //printf(" \n"); } //退出时,打开文件 My_ShellExecute(NULL, "edit","OutPut.txt" , NULL, NULL, SW_SHOWNORMAL|SW_SHOWMAXIMIZED); CloseOrFreeGlobalVar(); /*getch();*/}void ExecAppByCmd(){ int Ret = WinExec("I:/C_zww_projects/FileDelete/Debug/FileDelete.exe I:/C_zww_projects/FileDelete log",SW_SHOWMAXIMIZED); WriteFormatted(g_fpLog,"WinExec...return[%d]\n",Ret);} 你刚才选择了是,退出> 你刚才选择了否,继续> 任意键>
posted on 2012-06-13 00:28 阅读( ...) 评论( ...)