2014-01-14 93 views
0

我在搜索第一個出現的單詞的位置時遇到了一些困難。 該軟件必須搜索到一個確定的txt文件指定的單詞。所以我已經使用fstream lib打開了,然後寫了一些東西。但我不知道如何讓軟件得到這個詞的確切位置。我得到的是這樣的:C++讀取和修改txt文件中的一行

#include <iostream> 
#include <fstream> 
#include <string.h> 

using namespace std; 

int main() { 
    fstream myfile; // fstream to read and write the myfile 
    string cText = "\n--something--!\n"; // what it will write 
    string line; // will assign the getline() value; 
    unsigned int pos = 0; //will be assigned to "seekp" - where it will start to write 

    myfile.open("example.html", ios::binary | ios::in | ios::out); 

    if(!myfile) { 
    cout << "File does not exist!" << endl; 
    cin.get(); 
    return false; 
    } 

    do { 
    size_t found = line.find("<head>"); 
    cout << string::npos << endl; 
    if (found != string::npos) { 
     cout << line << endl; 

    } 
    }while(getline(myfile, line)); 

    myfile.seekp(pos+1, ios::beg); 
    //myfile.write(cText, strlen(cText)); //write cText 
    myfile.close(); 
    cin.get(); 
    return 0; 
} 

有什麼建議嗎?

+2

......... tellg? – derpface

回答

1

不要嘗試更改文件中的字節。創建一個新文件,複製這些行直到找到想要替換的行,輸出新行,然後輸出其餘行。因爲除非你用一個字符串替換一個字符串,而用另一個字符串的字符數相同的字符串,否則你將會覆蓋文件中的下一行 - 並且沒有好辦法來避免這種情況。

如果需要,可以刪除原始文件,然後將新文件重命名爲該名稱。

+0

另外,如果文件太大或者用戶不想浪費內存來保存整個文件,用戶可以緩衝數據並將其分塊寫入新文件,清理緩衝區,讀取更多數據等等。 。最後擦除舊文件並重命名臨時文件。 –