共用方式為


輸出檔資料流成員函式

輸出資料流的成員函式有三種類型:相當於操作工具的類型、會執行未格式化寫入作業的類型,以及其他會修改資料流狀態,且沒有對等的操作工具或插入運算子的類型。 對於循序的格式化輸出,您可能僅會使用插入運算子和操作工具。 對於隨機存取二進位磁碟輸出,您會使用其他的成員函式 (無論搭配插入運算子與否)。

輸出資料流的 open 函式

若要使用輸出檔案資料流 (ofstream),您必須將該數據流與建構函式或函 open 式中的特定磁碟檔案產生關聯。 如果您使用 函 open 式,您可以使用一系列檔案重複使用相同的數據流物件。 不論使用哪一種,描述檔案的引數都一樣。

當您開啟與輸出數據流相關聯的檔案時,通常會指定 open_mode 旗標。 您可以將這些旗標結合在 類別中 ios 定義為列舉值,以及位 OR ( | ) 運算子。 如需列舉值的清單,請參閱 ios_base::openmode

有三種常見的輸出資料流情況會牽涉到模式選項:

  • 建立檔案。 如果檔案已經存在,將會刪除舊版本檔案。

    ofstream ofile("FILENAME");
    // Default is ios::out
    
    ofstream ofile("FILENAME", ios::out);
    // Equivalent to above
    
  • 將記錄附加至現有的檔案,或在不存在時建立記錄。

    ofstream ofile("FILENAME", ios::app);
    
  • 在相同的資料流上開啟兩個檔案,一次開啟一個。

    ofstream ofile();
    ofile.open("FILE1", ios::in);
    // Do some output
    ofile.close();    // FILE1 closed
    ofile.open("FILE2", ios::in);
    // Do some more output
    ofile.close();    // FILE2 closed
    // When ofile goes out of scope it is destroyed.
    

put 函式

put 式會將一個字元寫入輸出數據流。 下列兩個陳述式的預設值都相同,但第二個會受到資料流的格式引數影響:

cout.put('A');

// Exactly one character written
cout <<'A'; // Format arguments 'width' and 'fill' apply

write 函式

write 式會將記憶體區塊寫入輸出檔案數據流。 長度引數會指定要寫入的位元組數目。 這個範例會建立輸出檔案資料流,並將 Date 結構的二進位值寫入它:

// write_function.cpp
// compile with: /EHsc
#include <fstream>
using namespace std;

struct Date
{
   int mo, da, yr;
};

int main( )
{
   Date dt = { 6, 10, 92 };
   ofstream tfile( "date.dat" , ios::binary );
   tfile.write( (char *) &dt, sizeof dt );
}

write 式不會在到達 NULL 字元時停止,因此會寫入完整的類別結構。 此函式會採用兩個引數:char 指標和要寫入的字元計數。 請注意結構物件位址之前的必要轉換 char *

seekp 和 tellp 函式

輸出檔案資料流會保留內部指標,該指標指向接下來要寫入資料的位置。 seekp 成員函式會設定此指標,並提供隨機存取磁碟檔案輸出。 tellp 成員函式會傳回檔案位置。 如需使用相當於 和 之輸入數據流seekp的範例,請參閱 tellgseekgtellp

輸出資料流的 close 函式

成員 close 函式會關閉與輸出檔案數據流相關聯的磁碟檔案。 若要完成所有的磁碟輸出,必須先關閉檔案。 如有必要, ofstream 解構函式會為您關閉檔案,但如果您需要為相同的數據流對象開啟另一個檔案,您可以使用 函 close 式。

只有在建構函式或 open 成員函式開啟檔案時,輸出數據流解構函式才會自動關閉數據流的檔案。 如果您為已開啟的檔案傳遞建構函式的檔案描述元或使用 attach 成員函式,則必須明確地關閉檔案。

錯誤處理函式

寫入資料流時,請使用下列成員函式來測試是否發生錯誤:

函式 傳回值
bad 如果發生無法復原的錯誤,則傳 true 回 。
fail true如果發生無法復原的錯誤或「預期的」條件,例如轉換錯誤,或找不到檔案,則傳回 。 使用零自變數呼叫 clear 之後,處理通常會繼續。
good true如果沒有錯誤條件(無法復原或無法復原),且未設定檔案尾旗標,則傳回 。
eof true 回檔尾條件。
clear 設定內部錯誤狀態。 如果使用預設引數呼叫,它會清除所有錯誤位元。
[rdstate](basic-ios-class.md#rdstate 傳回目前的錯誤狀態。

運算子 ! 會多載,以執行與函 fail 式相同的函式。 因此運算式︰

if(!cout)...

等於:

if(cout.fail())...

運算子 void*() 會多載為與運算符相反的 ! ,因此表達式:

if(cout)...

等於:

if(!cout.fail())...

運算子 void*() 不等於 good ,因為它不會測試檔尾。

另請參閱

輸出資料流