所以我想輸入文件中的東西,但它似乎並沒有工作。我的代碼是這樣的:std :: ofstream追加文件
ofstream f("reservedTables.DAT");
cin >> table;
f.open("reservedTables.DAT", ios::out | ios::app);
f << table;
f.close();
我在做什麼錯?我寫的變量table
的編號,但它並沒有出現在我把它放在文件中
所以我想輸入文件中的東西,但它似乎並沒有工作。我的代碼是這樣的:std :: ofstream追加文件
ofstream f("reservedTables.DAT");
cin >> table;
f.open("reservedTables.DAT", ios::out | ios::app);
f << table;
f.close();
我在做什麼錯?我寫的變量table
的編號,但它並沒有出現在我把它放在文件中
這是因爲你打開文件兩次。
如果你打電話給open
,你實際上打電話給rdbuf()->open(filename, mode | ios_base::out)
。請注意(ref):
如果關聯的文件已打開,則立即返回空指針。
由於空指針已被返回,它被分配給內部文件緩衝區,並且不再打開文件。這意味着任何嘗試寫入失敗。
構造已打開文件,如果你指定一個文件名,所以你不需要調用open
:
std::ofstream f("reservedTables.DAT");
std::cin >> table;
f << table;
f.close();
快速穿行:
ofstream f("reservedTables.DAT");
分配流,並打開該文件。
cin >> table;
讀取來自用戶的輸入。
f.open("reservedTables.DAT", ios::out | ios::app);
嘗試重新打開文件。將失敗。
f << table;
打開失敗並且無法寫入時,流處於失敗狀態。
f.close();
關閉文件。
只打開一次文件並檢查錯誤。
ofstream f("reservedTables.DAT", ios::app); // no need for ios::out.
// Implied by o in ofstream
cin >> table;
if (f.is_open()) // make sure file opened before writing
{
if (!f << table) // make sure file wrote
{
std::cerr << "Oh snap. Failed write".
}
f.close(); // may not be needed. f will automatically close when it
// goes out of scope
}
else
{
std::cerr << "Oh snap. Failed open".
}
謝謝你的回答! – Roland
注意:創建'std :: ofstream'時不需要'ios :: out',因爲它已經是一個輸出流,並且會自己添加'ios :: out'。 Jae。 – Rakete1111
Ja。刪除了錯誤的'ios :: out |'我應該知道比在西方玩最快的槍更好。 – user4581301
@ rRakete1111那麼如果我不打開它,當我寫入它的時候如何追加它?對不起,我已經使用fstream了,而且我知道的唯一方法就是當你打開文件 – Roland
@Roland如果你看[構造函數](http://en.cppreference.com/w/cpp/io/basic_ofstream/basic_ofstream),你會注意到它也接受默認模式作爲第二個參數。 – Rakete1111