資源簡介
仿照unix操作系統中的find命令,在實現一個myfind命令。myfind命令從指定的目錄下開始,遞歸地查找指定文件。其命令格式如下:
myfind PATH -option 參數 [-print] [-exec 命令 {} \;]
代碼片段和文件信息
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#define?TRUE?1
#define?FALSE?0
#define?MAX_SIZE???100
int?nameSwitch?=FALSE;//-name命令的開關
int?pruneSwitch=FALSE;//-prune命令的開關
int?mtimeSwitch=FALSE;//-mtime命令的開關
int?ctimeSwitch=FALSE;//-ctime命令的開關
int?printSwitch=FALSE;//-print命令的開關
int?execSwitch?=FALSE;//-exec命令的開關
char?*nameParam;//-name命令的參數
char?*pruneParam;//-prune命令的參數
char?*mtimeParam;//-mtime命令的參數
char?*ctimeParam;//-ctime命令的參數
char?*execParam[MAX_SIZE];//-exec命令的參數
int?execParamIndex;//-exec命令的參數的個數
char?result[MAX_SIZE][MAX_SIZE];
int?resultIndex=0;
//幫助提示
void?printHelp()
{
????????printf(“-help?\n“);
????????printf(“用法:myfind?路徑?-選項?參數\n“);
????????printf(“選項說明:\n“);
????????printf(“-name??\“文件\“\n\t指定要查找的文件名\n“);
????????printf(“-prune??目錄\n\t指出搜索時不搜索該目錄\n“);
????????printf(“-mtime??+n或-n\n\t按修改時間查找\n“);
????????printf(“\t+n表示n天之前修改過的文件\n“);
????????printf(“\t-n表示n今天到n天之前修改過的文件\n“);
????????printf(“-ctime??+n或-n\n\t按創建時間查找\n“);
????????printf(“\t+n表示n天之前創建的文件\n“);
????????printf(“\t-n表示今天到n天前之間創建的文件\n“);
????????printf(“-print\n\t將搜索結果輸出到標準輸出\n“);
????????printf(“-exec???命令?[參數]?\\;\n\t對查找到的結果執行指定的命令(注意要輸入\\;作為結束)\n“);
}
//命令解析
void?interpreter(int?argcchar?*argv[])
{
??int?iflag=1;
??for(i=2;i ??{
??????if(strcmp(argv[i]“-name“)==0)
??????{
??????????nameSwitch=TRUE;
??????????nameParam=argv[++i];
//??????????printf(“nameParam=%s\n“nameParam);
??????}
??????else?if(strcmp(argv[i]“-prune“)==0)
??????{
??????????pruneSwitch=TRUE;
??????????pruneParam=argv[++i];
//??????????printf(“pruneParam=%s\n“pruneParam);
??????}
??????else?if(strcmp(argv[i]“-mtime“)==0)
??????{
??????????mtimeSwitch=TRUE;
??????????mtimeParam=argv[++i];
//??????????printf(“mtimeParam=%s\n“mtimeParam);
??????}
??????else?if(strcmp(argv[i]“-ctime“)==0)
??????{
??????????ctimeSwitch=TRUE;
??????????ctimeParam=argv[++i];
//??????????printf(“ctimeParam=%s\n“ctimeParam);
??????}
??????else?if(strcmp(argv[i]“-print“)==0)
??????{
??????????printSwitch=TRUE;
??????}
??????else?if(strcmp(argv[i]“-exec“)==0)
??????{
??????????int?j=0;
??????????execSwitch=TRUE;
??????????while(strcmp(argv[i]“;“)!=0)
??????????{
???????????execParam[j++]=argv[++i];
??????????}
??????????execParamIndex=j;
//??????????int?k;
//??????????for(k=0;k //??????????????printf(“execParam=%s\n“execParam[k]);
??????}
??????else?flag=0;
??}
??if(!flag)
??{
????printHelp();
????exit(EXIT_FAILURE);
??}
}
//掃描文件
int?browse_folder(char?*?pathName)
{
??DIR?*pdir;
??struct?dirent*pentry;//目錄結構體
??char?temp[256];
??char?path[256];
??pdir?=opendir(pathName);
??if(pdir==NULL)
??{
??????perror(“opendir“);
??????return?0;
??}
??while((pentry=readdir(pdir))!=NULL)
??{
??????if(strcmp(pentry->d_name“.“)==0||strcmp(pentry->d_name“..“)==0)
??????????continue;
??????strcpy(temppathName);
??????sprintf(path“%s/%s“temppentry->d_name);
//?
- 上一篇:DotNetARX6.0.rar
- 下一篇:簡單代碼解釋器
評論
共有 條評論