1. 程式人生 > >c++輸出檔案流ofstream用法詳解

c++輸出檔案流ofstream用法詳解

目錄

這裡寫圖片描述

標頭檔案 <fstream>包含的多個檔案流類,這裡列出常用的4個:

  • ifstream Input file stream class (class )連結
  • ofstream Output file stream (class )連結
  • fstream Input/output file stream class (class )連結
  • filebuf File stream buffer (class )連結

輸入流的繼承關係:

ios_base <- ios <- ostream <- ofstream

Public member functions (1-6)

1, (constructor)

default (1) ofstream(); // 只定義不關聯

initialization (2)  //關聯檔案filename,預設模式 ios_base::out
explicit ofstream (const char* filename, ios_base::openmode mode = ios_base::out);
explicit ofstream (const string& filename, ios_base::openmode mode = ios_base::out);

copy (3)    //禁止拷貝賦值
ofstream (const
ofstream&) = delete; move (4) //可以右值引用臨時變數賦值 ofstream (ofstream&& x);

2, ofstream::open

//和第二種建構函式一樣,繫結檔案
void open (const   char* filename,  ios_base::openmode mode = ios_base::out);
void open (const string& filename,  ios_base::openmode mode = ios_base::out);

3, ofstream::is_open

bool is_open() const;
// 檔案開啟返回 true ,否則 false

4, ofstream::close

void close();
// Closes the file currently associated with the object, disassociating it from the stream.

5, ofstream::rdbuf

filebuf* rdbuf() const;
// 返回一個指標,指向 filebuf 物件,filebuf 要麼通過open()和檔案繫結,要麼通過rdbuf()與fstream物件繫結,繫結後才能使用。

int main () {
  std::ifstream ifs ("test.txt");
  std::ofstream ofs ("copy.txt");

  std::filebuf* inbuf  = ifs.rdbuf();
  std::filebuf* outbuf = ofs.rdbuf();

  char c = inbuf->sbumpc();
  while (c != EOF)
  {
    outbuf->sputc (c);
    c = inbuf->sbumpc();
  }
  ofs.close();
  ifs.close();
  return 0;
}

6,ofstream::operator=

copy (1) //禁止copy賦值
ofstream& operator= (const ofstream&) = delete;
move (2// 可以右值引用建立物件。
ofstream& operator= (ofstream&& rhs);

Public member functions inherited from ostream (7-11)

7,std::ostream::operator<<

用法和 cout<< 一樣,是寫資料到檔案最方便的函式,過載了常用的資料型別。

 arithmetic types (1)   
ostream& operator<< (bool val);
ostream& operator<< (short val);
ostream& operator<< (unsigned short val);
ostream& operator<< (int val);
ostream& operator<< (unsigned int val);
ostream& operator<< (long val);
ostream& operator<< (unsigned long val);
ostream& operator<< (long long val);
ostream& operator<< (unsigned long long val);
ostream& operator<< (float val);
ostream& operator<< (double val);
ostream& operator<< (long double val);
ostream& operator<< (void* val);

stream buffers (2)  
ostream& operator<< (streambuf* sb );

manipulators (3)    
ostream& operator<< (ostream& (*pf)(ostream&));
ostream& operator<< (ios& (*pf)(ios&));
ostream& operator<< (ios_base& (*pf)(ios_base&));

string資料型別,作為引數寫入到ofstream,在標頭檔案<string>
中對輸出運算子過載。
std::operator<< (string)

ostream& operator<< (ostream& os, const string& str);

8,ostream::put

ostream& put (char c);
//插入字元 c 到流中

9,ostream::write

ostream& write (const char* s, streamsize n);
//從陣列s中取n 個字元插入到流中

10,ostream::tellp

streampos tellp();
返回檔案指標的位置, streampos 可以轉為int

11,ostream::seekp

(1) 
ostream& seekp (streampos pos);
(2) 
ostream& seekp (streamoff off, ios_base::seekdir way);

//Sets the position where the next character is to be inserted into the output stream.

引數 pos 是流中的絕對位置可以轉化為 int
引數 off 是偏移量,與way相關,型別是 int
引數 way 可以選下表中的任意一個常量。

value offset is relative to…
ios_base::beg beginning of the stream
ios_base::cur current position in the stream
ios_base::end end of the stream

Public member functions inherited from ios(12-14)

12,ios::good

bool good() const;
bool eof() const;
bool fail() const;
bool bad() const;

檢測流的狀態是否正常。當錯誤的狀態flags (eofbit, failbit and badbit) 都沒被設定的時候返回true
特定的錯誤狀態可以用下面的函式(eof, fail, and bad)來檢測。

iostate value (member constant) indicates good() eof() fail() bad() rdstate()
goodbit No errors (zero value iostate) true false false false goodbit
eofbit End-of-File reached on input operation false true false false eofbit
failbit Logical error on i/o operation false false true false failbit
badbit Read/writing error on i/o operation false false true true badbit

13,ios::operator!

bool operator!() const;
//Returns true if either failbit or badbit is set, and false otherwise.
// 有錯誤狀態返回 true

// evaluating a stream (not)
#include <iostream>     // std::cout
#include <fstream>      // std::ifstream

int main () {
  std::ifstream is;
  is.open ("test.txt");
  if (!is)
    std::cerr << "Error opening 'test.txt'\n";
  return 0;
}

14,ios::operator bool

explicit operator bool() const;
C++11: Return true if none of failbit or badbit is set. false otherwise.
// 在條件語句中,無錯誤返回真,有錯返回假。
int main () {
  std::ifstream is;
  is.open ("test.txt");
  if (is) {
    // read file
  }
  else {
    std::cerr << "Error opening 'test.txt'\n";
  }
  return 0;
}

相關推薦

c++輸出檔案ofstream用法

目錄 標頭檔案 <fstream>包含的多個檔案流類,這裡列出常用的4個: ifstream Input file stream class (class )連結 of

C#中的IDisposable模式用法

數據庫 nor 是否 entry block 記錄日誌 自定義 技術分享 ssa 本文實例講述了C#中IDisposable模式的用法,針對垃圾資源的回收進行了較為詳細的講解。分享給大家供大家參考之用。具體方法如下: 首先,對於垃圾回收而言,在C#中,托管資源的垃圾回收是

C# List<T>用法

知新樹 寧金峰 所屬命名空間:System.Collections.Generic public class List<T> : IList<T>, ICollection<T>, IEnumerable<T>, IList, ICollection, IEnu

C++ this指標的 C++中this指標的用法

C++中this指標的用法詳解   轉自:http://blog.chinaunix.net/uid-21411227-id-1826942.html 1. this指標的用處:   一個物件的this指標並不是物件本身的一部分,不會影響sizeof(物件)的結果

c++中this指標的用法

為什麼引入this指標?     最簡單的應用場景就是:當我們在類中定義了一個變數,同時在類成員函式中定義了同一變數時,也就是說變數名重複時,但是我們想使用類中定義的變數,這個時候我們該怎麼辦呢?這個時候就是this指標大顯身手的時候了。為此我們引入this指標

C++中map容器的用法

Map是STL的一個關聯容器,它提供一對一(其中第一個可以稱為關鍵字,每個關鍵字只能在map中出現一次,第二個可能稱為該關鍵字的值)的資料 處理能力,由於這個特性,它完成有可能在我們處理一對一資料的時候,在程式設計上提供快速通道。這裡說下map內部資料的組織,map內部自建一

I O各類檔案的特性 & 關聯關係解析

I/O流之 各類流的特性及使用解析 一、I/O的檔案和檔案流體系總覽 (一)File類 1、對檔案的解析描述 【引入】 <1>程式中的資料都是 儲存在記憶體中, 集合、陣列、變數 ,缺點:程式一關,資料丟失 永久性儲存資料

c語言中static關鍵字用法

概述 static關鍵字在c語言中比較常用,使用恰當能夠大大提高程式的模組化特性,有利於擴充套件和維護。 但是對於c語言初學者,static由於使用靈活,並不容易掌握。本文就static在c語言中的應用進行總結,供參考使用。錯漏之處,請不吝指正。 在程

C/C++ struct 結構體定義 用法

在C語言中,定義一個結構體型別要用typedef : typedef struct point { int x; int y; }Point; 在宣告變數的時候就可以:Point

C++程式設計基礎】- typedef用法

最常見的兩種用法: 用途一: 定義一種型別的別名,而不只是簡單的巨集替換。 比如,可以用來同時宣告指標型的多個物件: char* pa, pb; //這多數不符合我們的意圖,它只聲明瞭一個指向字元變數的指標,和一個字元變數; 以下則可行: typedef char* PCHA

C++ 中 this 指標的用法

1. this指標的用處: 一個物件的this指標並不是物件本身的一部分,不會影響sizeof(物件)的結果。this作用域是在類內部,當在類的非靜態成員函式中訪問類的非靜態成員的時候,編譯器會自動將物件本身的地址作為一個隱含引數傳遞給函式。也就是說,即使你沒有寫上

[轉]c++優先隊列(priority_queue)用法

不同 pop cto nal abcd swa operator detail 插入元素 既然是隊列那麽先要包含頭文件#include <queue>, 他和queue不同的就在於我們可以自定義其中數據的優先級, 讓優先級高的排在隊列前面,優先出隊 優先隊列具有

C語言switch語句的用法

C語言還提供了另一種用於多分支選擇的switch語句, 其一般形式為: switch(表示式){          case常量表達式1:  語句1;         case常量表達式2:  語句2;         …          case常量表達式n:  語句n

[c++] vector中insert()的用法

iterator insert( iterator loc, const TYPE &val ); void insert( iterator loc, size_type num, const TYPE &val ); void insert( itera

dos命令之 type (顯示檔案內容)用法

在windows命令提示符下輸入 help type 命令回車後,看到如下幫助資訊: 顯示文字檔案的內容。 TYPE [drive:][path]filename 本以為這麼簡單個命令不用寫文件記錄了

C語言檔案讀寫函式

1.    首先要理解幾個概念:  檔案: 按一定規則儲存在磁碟上的資料集合。  檔名: 能唯一標識某個磁碟檔案的字串。形式: 碟符:/ 路徑 / 檔名.副檔名  文字檔案:: 資料以其數字字元的ASCII碼形式、一個位元組一個位元組地儲存在磁碟上。  二進位制檔案:資料以二進位制形式在儲存在磁碟上。  裝置

C語言中fopen函式用法

fopen函式用來開啟一個檔案,其呼叫的一般形式為:檔案指標名=fopen(檔名,使用檔案方式); 其中,“檔案指標名”必須是被說明為FILE 型別的指標變數;“檔名”被開啟檔案的檔名,是字串常量或字串陣列,要求是全路徑;“使用檔案方式”是指檔案的型別和操作要求。 檔案使用方

C++中棧和佇列用法

1.C++棧用法詳解 堆疊是一個容器的改編,棧是限定僅在表尾進行插入或刪除操作的線性表,因此表尾端成為棧頂,相應的,表頭端成為棧底,不含有任何元素的棧稱為空棧。它實現了一個先進後出的資料結構(FILO

nohup命令及其輸出檔案 linux nohup命令

linux nohup命令詳解 nohup命令及其輸出檔案       nohup命令:如果你正在執行一個程序,而且你覺得在退出帳戶時該程序還不會結束,那麼可以使用nohup命令。該命令可以在你退出帳戶/關閉終端之後繼續執行相應的程序。nohup就是不掛起的意思( n o

C++通過jsoncpp類庫讀寫JSON檔案-json用法

介紹: JSON 是常用的資料的一種格式,各個語言或多或少都會用的JSON格式。 JSON是一個輕量級的資料定義格式,比起XML易學易用,而擴充套件功能不比XML差多少,用之進行資料交換是一個很好的選擇。JSON的全稱為:JavaScript Object Notation ,顧名思義,JSON是用於標記