2015-11-07 159 views
0

我已經創建了一個代碼寫入.txt文件的東西,並從中讀取。但是如果我關閉程序並重新開始寫入,它將刪除舊文本並用新文本覆蓋它。如何在C++中保存.txt文件?

有沒有辦法不覆蓋現有的數據?

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

using namespace std; 

void check() { 

    string text; 
    ifstream file; 
    file.open("test.txt"); 
    getline(file, text); 

    if (text == "") { 
     cout << "There's no data in file" << endl; 
    } else { 
     cout << "File contains:" << endl; 
     cout << text << endl; 
    } 
} 

int main() { 

    check(); 

    string text; 
    ofstream file; 
    file.open("test.txt"); 
    cout << "Type some text" << endl; 
    getline(cin, text); 
    file << text; 

    return 0; 
} 
+0

嗨,請顯示您嘗試過的一些代碼,然後我們可以嘗試幫助您 –

+0

您所說的這個「問題」是什麼?這聽起來像是按照預期工作。 –

+0

我發佈了我的代碼 –

回答

2

您需要在下面的例子中打開該文件在「追加」模式一樣

#include <fstream> 

int main() { 
    std::ofstream outfile; 

    outfile.open("yourfile.txt", std::ios_base::app);//std::ios_base::app 
    outfile << "your data"; 
    return 0; 
} 

你可以在這裏閱讀關於fstream的標誌
http://www.cplusplus.com/reference/fstream/fstream/open/

0

請插入下次編碼。如果您以寫入模式打開文件,而不是每次寫入文件時都正常,文件的內容就會改變。你需要使用追加模式。

1

請記住,在C++中有幾種文件數據打開,保存和讀取的方式。這聽起來像你用一個函數(及其選項)打開以始終創建一個新文件。你可以做的一件事是運行程序,然後關閉程序並使用文本編輯器打開文件以驗證寫入文件的文本是否真的存在。另外看看Evyatar提供的代碼。這個例子使用了允許讀,寫和追加選項的ofstream。 「app」參數告訴程序保留文件中已有的內容,並追加下一次運行中添加的任何新數據。在測試您要添加的文件時,請注意,最終不會得到一個您不打算擁有這麼大文件的大文件。

0

在您發佈在修訂後的問題中的代碼中,請務必在檢查功能中和程序結束時關閉該文件。如果你不這樣做,可能會把事情掛掉。作爲預防措施,我通常在打開文件之前關閉一個文件,以確保它沒有問題關閉。這種做法來自我在BASIC編程的日子,在那裏它是必不可少的。如果程序崩潰,直到關閉它才能再次打開它。另外,當然,在完成之後和程序結束之前關閉文件。然後,當你在main中打開它時,用append選項打開。

相關問題