我有一個已經包含一些數據(比如,8 KB)的文件寫入到同一個文件。我想從文件的開頭讀取一些內容,然後在我讀完的地方重寫數據。所以,我嘗試使用下面的代碼:閱讀和使用相同的fstream
std::fstream stream("filename", std::ios::in | std::ios::out | std::ios::binary);
char byte;
stream.read(&byte, 1);
// stream.seekp(1);
int bytesCount = 4096;
auto bytesVec = std::vector<char>(bytesCount, 'c');
char* bytes = bytesVec.data();
std::cout << stream.bad() << std::endl;
stream.write(bytes, bytesCount);
std::cout << stream.bad() << std::endl;
如果我執行這個代碼,第一bad()
回報false
,但第二個返回true
和實際並沒有任何書面。
如果我將bytesCount
減小到小於4096的任何值(大概是某個內部緩衝區的大小),第二個bad()
返回false
,但仍然沒有寫入任何內容。
如果我取消對seekp()
行的註釋,則寫入開始工作:bad()
返回false
並且實際寫入的字節。
爲什麼這裏的必要seekp()
?爲什麼沒有它,它不工作? seekp()
是否是正確的方法?
我使用Visual Studio 2012在Windows 7
這是爲C++流記錄嗎?或者MS的實施不遵循這方面的標準? – svick
@svick查看更新。 –