C语言代码搜索神器for Mac

  • 程序功能
    • 精确搜索一个文件夹中的所有子文件夹中的指定类型文件中的指定字符串,搜索到某个文件中存在指定字符串,则将此文件路径直接输出在终端上。
  • 操作方法
    • 用X-Code编译完成将可执行文件拖到桌面上双击打开后根据提示操作。
  • 代码如下
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int search(char a[],char searchString[])
{
    int i,j,k,t=strlen(searchString),s=strlen(a)-t;
    for(i=0;i<=s;i++)
    {
        
        for(j=i,k=0;k<t;k++,j++)
        {
            //忽略大小写判断单个字符是否一样,不一样则跳出
            if(a[j]!=searchString[k]&&abs(a[j]-searchString[k])!=32)break;
        }
        if(k==t) return 1;
    }
    return 0;
}
int main()
{
    /**要执行的find命令*/
    char command[5000];
    /**需要合并代码的文件夹路径*/
    char folderPath[5000];
    /**文件后缀名*/
    char suffix[20];
    /**存放所有搜索到的文件路径的临时文件,在这个文件中每个路径单独占一行,最后这个文件会被删除*/
    char tempFile[5000];
    /**临时文件的指针*/
    FILE *fTempFile;
    /**单个文件路径*/
    char singleFile[5000];
    /**单个文件的指针*/
    FILE *fSingleFile;
    /**存放单个文件中的所有内容*/
    char singleFileContent[1000000];
    /**要查找的字符串*/
    char searchString[1000];
    /**文件的数量*/
    int fileNum;
    int i;
    char ch;
    while(1)
    {
        printf("请拖入文件夹路径:");
        scanf("%s",folderPath);
        printf("请输入要合并文件的后缀(如.c,.txt):");
        scanf("%s",suffix);
        printf("请输入要查找的字符串(忽略大小写):");
        scanf("%s",searchString);

        //生成不完整的find命令
        strcpy(command,"find ");
        strcat(command,folderPath);
        strcat(command," -name *");
        strcat(command,suffix);
        strcat(command,">>");
        //生成临时文件的全路径
        strcpy(tempFile,folderPath);
        strcat(tempFile,"/temp.txt");
        //生成完整的find命令
        strcat(command,tempFile);
        //执行Unix下的find命令,将搜索到的内容输出到temp.txt文件中
        system(command);
        fTempFile = fopen(tempFile,"r");
        fileNum = 0;
        while(1)
        {
            i=-1;
            //每次得到一个文件的全路径
            while((singleFile[++i]=fgetc(fTempFile))!=10&&singleFile[i]!=EOF);
            
            if(singleFile[i]==EOF)
            {
                break;
            }
            singleFile[i]=0;//文件内容结尾标志
            fSingleFile=fopen(singleFile,"r");//打开文件
            i=0;
            while((ch=fgetc(fSingleFile))!=EOF)
            {
                singleFileContent[i++] = ch;
            }
            singleFileContent[i] = 0;
            if (search(singleFileContent,searchString)) {
                fileNum++;
                printf("\n%d:%s\n\n",fileNum,singleFile);
            }
            
            fclose(fSingleFile);
        }
        fclose(fTempFile);
        //生成删除临时文件的命令
        strcpy(singleFile,"rm ");
        strcat(singleFile,tempFile);
        system(singleFile);//删除临时文件
        if(fileNum==0) printf("\n查询无结果!\n\n");
        
    }
    return 0;
}
  • 结果如下
屏幕快照 2016-06-16 22.30.02.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Ubuntu的发音 Ubuntu,源于非洲祖鲁人和科萨人的语言,发作 oo-boon-too 的音。了解发音是有意...
    萤火虫de梦阅读 99,466评论 9 467
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,836评论 18 139
  • 一、温故而知新 1. 内存不够怎么办 内存简单分配策略的问题地址空间不隔离内存使用效率低程序运行的地址不确定 关于...
    SeanCST阅读 7,865评论 0 27
  • linux资料总章2.1 1.0写的不好抱歉 但是2.0已经改了很多 但是错误还是无法避免 以后资料会慢慢更新 大...
    数据革命阅读 12,203评论 2 33
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,811评论 25 708