1. 程式人生 > >C語言在TXT檔案中搜索字串

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, 

應該是日誌檔案有自己定義的結構,讀內容無法查詢該內容。