C语言在TXT文件中搜索字符串

方法一:

bool CBrowseDir::SearchTXT(const char *filename)
{
    string filename1( filename );
    string keyword( "word" );

    ifstream in( filename1.c_str());
    if( in )
    {   
        ostringstream os; 
        os << in.rdbuf();
        string content( os.str() );
        if( string::npos != content.find( keyword ) ) 
        {   
            cout << "Find \"" << keyword << "\"!" << endl;
            return true;
        }else{
            cout << "\"" << keyword << "\" Not found!" << endl;
            return false;
        }   
    }else{
        cerr << "Open file error!" << endl;
        return false; 
    }   
    return false;
}

Q1:在遇到MSDN帮助文档中一个日志文件(.txt,该文件大于10M)时,程序运行卡住,CPU占用率很高。

方法二:

bool CBrowseDir::SearchTXT(const char *filename)
{

    FILE *fp;
    char temp[256];
    if((fp=fopen(filename,"rb"))==NULL)
    {
        printf("不能打开文件!!!\n");
        return false;
    }
    while(fgets(temp,255,fp))
    {  

        temp[strlen(temp) -1] = '\0';
        if(strstr(temp, m_szKeyWord)!=NULL)
        {
            printf("%s\n",temp);
            fclose(fp);
            return true;
        }
    } 
    fclose(fp);
    return false;

}

用C的方法循环按行读取,大的文件不会卡住,但在上述该txt文件中写入关键字(如:test),无法搜索到该结果。
分析原因:
删除该文件内容,写入测试数据,并打印出来:
文件内容:

testaabbtest
***EndOfSession*** 
ettest
test

tet
test

读取出来并%s打印出来的内容:













结束

内存中为乱码。
创建文件a.txt,都写入相同的内容:test
用C32asm查看:
a.txt文件内容:

0x74,  0x65,  0x73,  0x74,  0x0D,  0x0A,  

日志.txt文件内容:

0xFF,  0xFE,  0x74,  0x00,  0x65,  0x00,  0x73,  0x00,  0x74,  0x00, 

应该是日志文件有自己定义的结构,读内容无法查找该内容。

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值