2013-08-06 77 views
1

如果這個問題已經被問及我的谷歌技能失敗了,我很抱歉。防止C++文件中的行重複

我正在與ncurses的一個簡單的控制檯遊戲,我想包括額外的絕殺,獎金材料,等這個鎖定壓縮文件夾...

我可以寫代碼的文件就好了但無論什麼原因,當我重新訪問將文本寫入文件的地方時,它會重演。我試過尋找一個解決方案,並沒有找到一個,所以這是我的最後手段。

基本信息:我使用Windows,但我希望程序是跨平臺的。如果需要更多信息,我很樂意提供。

編輯1:

std::ifstream checkFile("Unlocks.txt"); 
if(checkFile.is_open()) 
{ 
    std::string data; 
    std::string fernox = "Unlock for Fernox Piraxis File"; 
    while(std::getline(checkFile, data)) 
    { 
     if(data.find(fernox) == std::string::npos) 
     { 
      std::ofstream myFile("Unlocks.txt", std::ios::app); 
      myFile << "Unlock for Fernox Piraxis File: ZWdOFMRmeE\n"; 
      myFile.close(); 
      break; 
     } 
    } 
    checkFile.close(); 
} 

編輯2: 我並不想覆蓋其他文件的任何部分。這段代碼「假設」用於檢查上面的行是否已經寫入文件中,如果不是,寫入它。如果文件中已存在該行,我不希望它再次寫入相同的行(並且我正在使用ios::app,以便它不會覆蓋文件中已有的任何內容。)

在此先感謝您的幫助。

編輯3: 現在的工作感謝twalberg

終極密碼:

std::ifstream checkFile ("Unlocks.txt"); 
if(checkFile.is_open()) 
{ 
    bool found = false; 
    std::string data; 
    std::string fernox ("Unlock for Fernox Piraxis File"); 
    while(std::getline(checkFile, data)) 
    { 
     if(data.find(fernox) != std::string::npos) 
     { 
      found = true; 
      break; 
     } 
    } 
    if(!found) 
    { 
     std::ofstream myFile("Unlocks.txt", std::ios::app); 
     myFile << "Unlock for Fernox Piraxis File: ZWdOFMRmeE\n"; 
     myFile.close(); 
    } 
    checkFile.close(); 
} 
+0

你的循環讀取checkFile'的'第一線,然後將其關閉不管在'data'字符串中搜索'fernox'的結果。我無法想象這是故意的,因爲它使得代碼循環變得毫無意義。我不知道這是否與你描述的問題有關(我不太明白),但我想我應該指出。 –

+0

你應該考慮從if和else塊中刪除「CheckFile.close()」。因爲它無論如何都會被執行,只有一個外部就足夠了) –

+0

好吧,我從if和else語句中刪除了'checkFile.close()',但它沒有幫助,問題在於它是一個幫助菜單,如果你閱讀故事,可以訪問該角色的生物。如果你返回並再次閱讀故事部分,它會重複生物的代碼。希望能夠清除一點點。 – Piraxis

回答

1

您當前的邏輯是有點過你正在閱讀的文件的第一行,如果這線不匹配,你一個放入字符串並跳出循環。你需要的是一個結構更加喜歡這個,檢查文件的每一行,然後才決定是否追加你的字符串:

// open file 

bool found = false; 
while (std::getline(checkFile, data)) 
{ if (data.find(fernox) != std::string::npos) // we found a match 
    { found = true; 
    break; 
    } 
} 

if (!found) 
{ // append string here 
} 

// close file 
+0

經過測試和工作。非常感謝你。作爲初學者,這些東西仍然沒有完全掌握在我的掌握之中,所以再次感謝。 – Piraxis