簡體   English   中英

ostream :: write實際寫入了多少字節?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM