![](/img/trans.png)
[英]How to get how many chars were written in a ostream with the operator<<? Or how to read what was written?
[英]how many bytes actually written by ostream::write?
假設我向ostream :: write發送一個大緩沖區,但只有它的開頭部分實際上已成功寫入,其余部分未寫入
int main()
{
std::vector<char> buf(64 * 1000 * 1000, 'a'); // 64 mbytes of data
std::ofstream file("out.txt");
file.write(&buf[0], buf.size()); // try to write 64 mbytes
if(file.bad()) {
// but suppose only 10 megabyte were available on disk
// how many were actually written to file???
}
return 0;
}
什么ostream函數可以告訴我實際寫了多少字節?
您可以使用.tellp()
來了解流中的輸出位置,以計算寫入的字節數:
size_t before = file.tellp(); //current pos
if(file.write(&buf[0], buf.size())) //enter the if-block if write fails.
{
//compute the difference
size_t numberOfBytesWritten = file.tellp() - before;
}
請注意,不能保證numberOfBytesWritten
確實是寫入文件的字節數,但它應該適用於大多數情況,因為我們沒有任何可靠的方法來獲取寫入文件的實際字節數。
我沒有看到任何與gcount()
相當的gcount()
。 直接寫入streambuf(使用sputn()
)會給你一個指示,但你的請求中存在一個基本問題:寫入被緩沖,故障檢測可以延遲到有效寫入(刷新或關閉),沒有辦法訪問操作系統真正寫的內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.