2012-11-24 50 views
2

我遇到麻煩ofstream,這是 - 當我這樣我如何合法更改ofstream對象的文件名值?

ofstream o_save; 

/*code*/ 

o_save = ofstream(filename); //Problem is here 

改變ofstream對象的價值... ...線之上徹底刪除文件的內容。

問題是我該如何合法改變filenameofstream的對象?

P.S.我不能在聲明它時定義它,因爲我希望它是全局的,我不確定我選擇了哪個保存文件。

+1

使用'o_save.open(「file.txt」,ios :: app)'打開並使用'o_save.close()'關閉。之後打開另一個。 –

+0

只要打開一個文件來寫就不應該「完全擦除文件的內容」。它只是打開文件,所以你可以覆蓋它的內容。如果你想附加到文件,然後更改[打開模式](http://en.cppreference.com/w/cpp/io/ios_base/openmode)。 –

+0

另外,打開文件後,不能簡單地「更改文件名」。看起來你不得不多想一點關於我們程序的設計,以及你想用它來完成什麼。 –

回答

3

這個問題非常模糊和矛盾,而且OP在提問後似乎已經睡了。所以我會試着偷看他的頭,並試圖闡述他想要的東西。

對於打開文件,有很多modes。像這樣打開它。

ofstream o_value ; 
o_value.open("file.txt") ; 

如果你想保留的該文件,使用原始內容..

o_value.open("file.txt", ios::app) ; 

如果要稍後將其關閉,並打開一個又一個,關閉使用...

o_value.close() ; 

ofstream的情況下,通常不允許使用文件名的鏈接。您可以使用<cstdlib>rename。您可以通過<cstdio>中的remove("file.txt")刪除文件。

+0

Allrightey,謝謝大家。 – user1849353

0

ofstream沒有某種抽象name屬性,名字只是一個參數,它的一些成員函數,在這個意義上詢問如何

變化filenameofstream對象來

是沒有意義的。

一般而言,您可以使用std::rename<cstdlib>重命名文件或使用Boost.Filesystem。

1

對於ofstream對象的「更改名稱」是什麼意思? 對象具有的唯一「名稱」ofstream變量的名稱是 變量。一個ofstream對象是一個數據流。您可以(在 某些系統上)更改它所關聯文件的名稱, 使用rename,但不知何故,我不認爲這就是您想要的 。您也可以關閉該流,然後在另一個 文件中重新打開該流。

您不能在iostream對象之間分配。如果更糟的是 更糟糕,你可以聲明全局對象爲指針,並且 分配給它(使用*o_save來寫入)。

最後,標準說當你打開一個ofstream時,你的 會截斷該文件(如果存在的話)。如果這不是你想要 要做的事情,那麼你必須添加一些標誌到打開模式。例如,如果你加入,你將不再使用 來截斷文件,並且所有的寫操作將會到達文件末尾 (如果系統支持,則是原子的)。或者(雖然 相當令人驚訝),您可以將std::ios::in添加到標誌; 如果該文件不存在,這將失敗,但會允許在文件的任何位置寫入 。如果您想要寫入文件中的任何位置,即使您不想讀取文件,也可以使用這種方法打開 文件的唯一方法即 。