本帖最后由 jiangdong27 于 2010-04-10 04:42:38 编辑

解决方案 »

  1.   

     //参数说明:  Flod 文件夹后面带 \
     // s 要搜索的内容
    function findfile(const Flod,s:string):tstringlist;
    var
      sr:TSearchRec; //定义 TSearchRec 结构变量
      Attr: Integer;     //文件属性
    begin
      if DirectoryExists(Flod) then //判断文件夹是否存在
      begin
        Attr := faAnyFile;          //文件属性值faAnyFile表示是所有文件
        if FindFirst(Flod + '*'+s+'*.txt',Attr,sr)=0 then //开始搜索,并给 sr 赋予信息, 返回0表示找到第一个
        begin
         repeat                      //如果有第一个就继续找
            //找到指定条件的文件
         until(FindNext(sr)<>0);    //因为sr已经有了搜索信息, FindNext只要这一个参数, 返回0表示找到
         end;
         FindClose(sr);                 //需要结束搜索, 搜索是内含句柄的
      end;
    end;
      

  2.   

     //参数说明:  Flod 文件夹后面带 \
     // s 要搜索的内容
    function findfile(const Flod,s:string):tstringlist;
    var
      sr:TSearchRec; //定义 TSearchRec 结构变量
      Attr: Integer;     //文件属性
    begin
      if DirectoryExists(Flod) then //判断文件夹是否存在
      begin
        Attr := faAnyFile;          //文件属性值faAnyFile表示是所有文件
        if FindFirst(Flod + '*'+s+'*.txt',Attr,sr)=0 then //开始搜索,并给 sr 赋予信息, 返回0表示找到第一个
        begin
         repeat                      //如果有第一个就继续找
            result:=result + ',' + sr.name //找到指定条件的文件
         until(FindNext(sr)<>0);    //因为sr已经有了搜索信息, FindNext只要这一个参数, 返回0表示找到
         end;
         FindClose(sr);                 //需要结束搜索, 搜索是内含句柄的
      end;
    end;
      

  3.   

    上楼不对,小弟想搜索txt具体内容内的搜索,不是搜索文件名。
      

  4.   

    下一个grep的源码(网上很多的).改成delphi的.工作量虽然大些,但可以学到很多东西
      

  5.   


    可以实现,但如果txt中指定的内容有多处存在,如何处理?是只搜索第一个,还是都要搜索到?如果都要搜索到,那就不是你本贴标题上的小问题了。
      

  6.   

    全文检索,实际上delphi IDE就有此功能,包括很多编辑器也有
    主要就是实现文本查找、匹配,如果不追求性能应当不复杂
    想研究一下,可参考grep源码
      

  7.   

    不对?你不是要在目录里面搜文件吗.如果你想还搜文件里面是否有指定字符,也需要遍历文件夹里面的文件啊.
    按你的要求我改了下[code=Delphi(Pascal//参数说明: Flod 文件夹后面带 \
     // s 要搜索的内容
    function findfile(const Flod,s:string):tstringlist;
    var
      sr:TSearchRec; //定义 TSearchRec 结构变量
      Attr: Integer; //文件属性
      f:TFileStream;
      str:string;
    begin
      if DirectoryExists(Flod) then //判断文件夹是否存在
      begin
      Attr := faAnyFile; //文件属性值faAnyFile表示是所有文件
      if FindFirst(Flod + '*.txt',Attr,sr)=0 then //开始搜索,并给 sr 赋予信息, 返回0表示找到第一个
      begin
      repeat //如果有第一个就继续找
       //主要是这里 找到文件后进行文件内容的匹配
       try
         f:=TFileStream.Create(sr.Name,fmopenread);
         setlength(str,f.Size);
         f.Read(str[1],f.Size);
         if pos(s,str)>0 then
           result.Add(sr.name);
         setlength(str,0);
       finally
         f.Free;
       end;
      until(FindNext(sr)<>0); //因为sr已经有了搜索信息, FindNext只要这一个参数, 返回0表示找到
      end;
      FindClose(sr); //需要结束搜索, 搜索是内含句柄的
      end;
    end;[/code]
      

  8.   

    //参数说明: Flod 文件夹后面带 \
     // s 要搜索的内容
    function findfile(const Flod,s:string):tstringlist;
    var
      sr:TSearchRec; //定义 TSearchRec 结构变量
      Attr: Integer; //文件属性
      f:TFileStream;
      str:string;
    begin
      if DirectoryExists(Flod) then //判断文件夹是否存在
      begin
      Attr := faAnyFile; //文件属性值faAnyFile表示是所有文件
      if FindFirst(Flod + '*.txt',Attr,sr)=0 then //开始搜索,并给 sr 赋予信息, 返回0表示找到第一个
      begin
      repeat //如果有第一个就继续找
      //主要是这里 找到文件后进行文件内容的匹配
      try
      f:=TFileStream.Create(sr.Name,fmopenread);
      setlength(str,f.Size);
      f.Read(str[1],f.Size);
      if pos(s,str)>0 then
      result.Add(sr.name);
      setlength(str,0);
      finally
      f.Free;
      end;
      until(FindNext(sr)<>0); //因为sr已经有了搜索信息, FindNext只要这一个参数, 返回0表示找到
      end;
      FindClose(sr); //需要结束搜索, 搜索是内含句柄的
      end;
    end;
      

  9.   

    f:=TFileStream.Create(sr.Name,fmopenread);
      setlength(str,f.Size);
      f.Read(str[1],f.Size);
      if pos(s,str)>0 then这四句话是什么意思?小弟新手,请各位老手继续带一下,非常感谢!!!