2013-06-05 89 views
1

我知道這個問題被問到here 但我沒有找到我在找什麼。目前我能找到的最佳答案顯示瞭如何向文本文件添加內容。如何閱讀然後在C++編輯文件txt

我該如何使用fstream來只讀取文本文件中的最後一個數字並讀取最後一個字符串呢?

或者,我怎樣才能簡單地替換文件中的某一行?例如:

的文件將是:

Line 1:NAME

Line 2:4

和代碼將改爲1號線,並將其分配給一個字符串,後來就改變它, 同樣與第二行

+0

http://stackoverflow.com/search?q=edit+a+line+of+a+text+file+%5BC%2B%2B%5D+is%3Aquestion –

+1

文件沒有「行」。這是一個由編程語言或庫增加的抽象層。文件不過是一個單獨的長字節字符串。任何你想用它做的事情,你都必須通過讀寫字節來完成。 –

回答

1

將文件視爲存儲在磁盤上的矢量。如果你想在文件中插入一些東西,你必須將所有東西都移過去,以便爲你的新線騰出空間。同樣,沒有一條線逐行查找文件並找到您的平臺的結束行字符,沒有什麼魔法可以找到一條線。

在大多數代碼中,處理這種類型的事情的方式是將整個文件加載到內存中,然後在那裏進行修改,並將整個文件寫回去。

+0

我該如何執行此操作?我是否應該從我的.txt加載所有信息,然後刪除原始文件,並通過創建新文件保存更改後的信息? – noonoox

+0

當您打開一個文件進行寫入時,它將覆蓋具有該名稱的任何現有文件。沒有必要明確刪除文件 – Joel

0

如果您確切知道每行有多少個字段以及多少行,這將幫助您創建一個while循環,該循環將分配字段到矢量或數組並相應地提取值。然後,如Joel建議的那樣,打開文件以使用新數據寫入和替換內容。

代碼:

#include <fstream> 
#include <vector> 
#include <string.h> //or <string> depending on you IDE, i use Xcode 

using namespace std; 

int main() { 

    vector <string> a; 
    vector <string> b; 
    string field1; 
    string field2; 

    ifstream data; 

    data.open("data.txt"); 

    if (data.fail()) { 
     cerr << "Error Opening File!" <<endl; 
     exit(1); 
    } 

    while (data >> field1 >> field2) { 
    a.push_back(field1); 
    b.push_back(field2); 
    } 

    data.close(); 

    return 0; 
} 

這將是你怎麼看它,矢量持有FIELD1,向量b持有場2,這意味着未來指數「1」將舉行下一行的值(2號線) 。

+0

對不起,我對C++非常陌生,並且有2個問題/錯誤,第一個是「ifstrem」。是一個錯字?我應該包括一些東西來使用它?第二個是:在field1 >> field2部分,表示沒有操作符「>>」匹配這些操作數。 – noonoox

+0

這是一個錯字,應該是'ifstream',在頭文件''中定義。 –

+0

我該如何解決無操作員錯誤? – noonoox