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是用於標記