zoukankan      html  css  js  c++  java
  • [转]在文件中查找字符串——一个可重用代码段

    因为做“给予电子邮箱的网络硬盘”要用到这么个东西,所以自己写了一个,也许算法不是很好,效率不是很高,但用于做那个网络硬盘的软件是足够了。

    我一共写了两个这样功能的函数,一个是静态成员函数,另一个是非静态成员函数,他们都是类CEMailFile类的成员,这个类是用于分析下载到本地的电子邮件并可以将编过码附件提取出来。

    以下是类的静态成员函数:

    int CEMailFile::FindInFile(LPCTSTR sFilePath, LPCTSTR sString)

    {

     CFile file;

     if(!file.Open(sFilePath,CFile::modeRead)) return -1;

     UINT nStrLen=strlen(sString);

     CFileStatus FileStatus;

     if(!file.GetStatus(FileStatus)) return -1;

     file.SeekToBegin();

     CString strBuff;

     int nRes=-1;

     strBuff.GetBufferSetLength(1024);

     for(long i=0;i<FileStatus.m_size;)

     {

      memset(strBuff.GetBuffer(0),'\0',1024); 

      file.Seek(i,CFile::begin);

      file.Read(strBuff.GetBuffer(0),1024);

      

      nRes=strBuff.Find(sString);

      if(nRes>=0)

      {

       file.Close();

       return i+nRes;

      }

      else

      {

       i=(i+1024)-nStrLen;

      }

     }

      file.Close();

     return nRes;

    }

    ///////////////////////////////////////////////////////////////////////////////

    说明:

    返回值:该函数的返回值是int型,如果查找成功,即找到了要查找的字符串(区分大小写),那就返回字符串首字符在文件中的位置(从0计算);如果查找不成功则返回一个负数;如果查找中遇到了其他的错误,如文件打开失败,文件状态异常等,也将返回负数(此时为-1)。

    参数:有两个参数,第一个参数sFilePath指示目标文件的路径(相对或绝对),第二个参数用于指示目标字符串(字符数组要以'\0'结尾),即要查找的字符串,二者都不应为空,否则会产生错误。

  • 相关阅读:
    一本通1331后缀表达式的值
    一本通1198 逆波兰表达式
    一本通1311 求逆序对(归并排序应用)
    快速排序
    一本通1310 车厢重组(冒泡排序,类似逆序对)
    一本通1186 出现次数超过一半的数(类似桶排序)
    一本通1216 红与黑 (代码没有参考任何博客,完全是自己写的,我搜索出山了!!!)
    一本通1222 放苹果
    一本通 1212 LETTERS
    一本通1215 迷宫
  • 原文地址:https://www.cnblogs.com/blueswitkey/p/3000967.html
Copyright © 2011-2022 走看看