2009-12-01 62 views
0

我正在寫一個函數,它應該(如果文件已經存在)將第一個數字加1並將函數的參數追加到文件末尾。C++文本文件指針問題

實施例:

  1. 追加(4,9);
  2. append(5,6);

文件內容物在1: 1 \ N 4 \ n 9

文件內容物在2: 2 \ N 4 \ n 9 \ N 5 \ N 6

int append (int obj, int objType) { 

ifstream infile; 
infile.open("stuff.txt"); 

if (infile.fail()){ 
    infile.close(); 

    ofstream outfile; 
    outfile.open("stuff.txt"); 
    outfile << 1 << endl << obj << endl << objType; 
    outfile.close(); 
} 
else { 

    int length = 0; 

    while (!infile.eof()){ 
    int temp; 
    infile >> temp; 
    length ++; 
    } 

    infile.close(); 
    infile.open("stuff.txt"); 

    int fileContents[length]; 
    int i = 0; 

    while (!infile.eof()){ /*PROGRAM DOES NOT ENTER HERE*/ 
    infile >> fileContents[i]; 
    i ++; 
    } 

    infile.close(); 

    ofstream outfile; 
    outfile.open("stuff.txt"); 

    fileContents[0] +=1; 

    for (i = 0; i < length; i++){ 
    outfile << fileContents[i] << endl ; 
    } 

    outfile << obj << endl << objType; 


} 

的程序永遠不會進入第二個while循環,所以內容永遠不會複製到數組中,然後複製到文件中。我不確定問題是什麼或如何解決。任何幫助將不勝感激。 :)

+1

您可能想要修復該格式。 – Catskul 2009-12-01 18:55:42

+0

...通過在每行加上4個空格。 – 2009-12-01 18:57:08

+1

謝謝:)新手在這裏:) – Erica 2009-12-01 19:02:21

回答

2

,而不是關閉並重新打開文件這樣(我不知道這是否操作的重置文件的位置,你需要!)爲什麼不使用std::fstream::seekg(),只是「倒帶」文件開始

infile.seekg(0, ios::beg) 
+0

我已經嘗試在int i = 0之後添加「infile.seekg(0,ios :: beg)」,但是while循環之後仍然被跳過(我假設因爲某些原因,EOF標誌仍然設置)。 謝謝你的時間。 :) – Erica 2009-12-01 19:36:51

+0

在調用seekg()之前調用'infile.clear()'。 – 2009-12-01 20:09:39

+0

它完美地工作。 :) 非常感謝! – Erica 2009-12-02 08:35:32

2

你還沒有讀取重置EOF標誌,所以你仍然從前一個文件獲得EOF。

這不是正確的文件輸入方式。嘗試更多的東西是這樣的:

int temp; 
while (infile >> temp) 
{ 
    ... 
} 

而且看得出來,他在前面的問題聯繫尼爾·巴特沃思的博客文章:http://punchlet.wordpress.com/2009/12/01/hello-world/

+0

我明白,你的代碼是更好的做法(mia culpa,感謝你指出),但我認爲問題是第二次,而不是你所指的? 如何「[做]讀取重置EOF標誌」? 再次感謝。 :) – Erica 2009-12-01 19:33:05

+1

我指的是第二時間。 EOF標誌只有在文件被讀取,未打開或關閉時才被設置或清除。因此,在測試eof()之前,您需要先進行讀取。在這種情況下,自上次循環中最後一次碰到EOF以來,您沒有進行讀取操作,因此eof()返回true,並且永遠不會輸入第二個循環。 – 2009-12-01 19:49:32

+0

但要閱讀,我不需要將指針重置迴文件的開頭? – Erica 2009-12-01 20:04:46