public member function
<ostream> <iostream>

std::basic_ostream::write

basic_ostream& write (const char_type* s, streamsize n);
寫入資料塊
將指標 s 指向的陣列的前 n 個字元插入流中。

此函式僅複製資料塊,而不檢查其內容:陣列可能包含 *null* 字元,它們也會被複制,而不會停止複製過程。

在內部,該函式透過首先構造一個 sentry 物件來訪問輸出序列。
然後(如果 good),它將字元插入其關聯的 流緩衝區 物件,就像呼叫其成員函式 sputc 一樣,直到寫入 n 個字元或插入失敗(在這種情況下,它會設定 badbit 標誌)。
最後,在返回之前,它會銷燬 sentry 物件。
在內部,該函式透過首先構造一個 sentry 物件來訪問輸出序列。
然後(如果 good),它將字元插入其關聯的 流緩衝區 物件,就像呼叫其成員函式 sputcsputn 一樣,直到寫入 n 個字元或插入失敗(在這種情況下,它會設定 badbit 標誌)。
最後,在返回之前,它會銷燬 sentry 物件。

引數

s
指向至少包含 n 個元素的陣列的指標。
成員型別 char_type 是流使用的字元型別(即其第一個類模板引數 charT)。
n
要插入的字元數。
型別為 streamsize 的整數值,表示要寫入的資料塊的字元大小。
streamsize 是一個帶符號整型。

返回值

basic_ostream 物件(*this)。

錯誤透過修改 內部狀態標誌 來指示。
flagerror
eofbit-
failbit如果 sentry 的構造失敗,則可能設定此標誌。
badbit在流上的插入失敗,或發生了其他錯誤(例如,當此函式捕獲由內部操作引發的異常時)。
當設定時,流的完整性可能受到影響。
一個操作可能設定多個標誌。

如果操作設定了一個已透過成員 exceptions 註冊的 內部狀態標誌,則該函式將引發一個成員型別為 failure 的異常。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// Copy a file
#include <fstream>      // std::ifstream, std::ofstream

int main () {
  std::ifstream infile ("test.txt",std::ifstream::binary);
  std::ofstream outfile ("new.txt",std::ofstream::binary);

  // get size of file
  infile.seekg (0,infile.end);
  long size = infile.tellg();
  infile.seekg (0);

  // allocate memory for file content
  char* buffer = new char[size];

  // read content of infile
  infile.read (buffer,size);

  // write to outfile
  outfile.write (buffer,size);

  // release dynamically-allocated memory
  delete[] buffer;

  outfile.close();
  infile.close();
  return 0;
}

此示例將檔案複製到記憶體,然後將其內容寫入新檔案。

資料競爭

訪問指標 s 指向的最多 n 個字元。
修改流物件。
對同一流物件的併發訪問可能導致資料競爭,標準流物件(coutcerrclogwcoutwcerrwclog)除外,當這些流物件與 stdio 同步 時(在這種情況下,不會發生資料競爭,儘管不保證來自多個執行緒的字元插入順序)。

異常安全

基本保證:如果丟擲異常,物件處於有效狀態。
如果生成的 錯誤狀態標誌 不是 goodbit 並且成員 exceptions 被設定為引發該狀態,則它會引發一個成員型別為 failure 的異常。
任何由內部操作引發的異常都會被函式捕獲並處理,從而設定 badbit。如果 badbit 在最後一次呼叫 exceptions 時被設定,則該函式會重新引發捕獲到的異常。

另見