打開文件的方式
當我們想要打開的文件不存在的時候,一般地,ofstream類的對象會默認地自動創建一個文件。而如果我們想要打開的文件是存在的,那麼就會調用ofstream的構造函數或者是調用open()函數進行打開。下面,我們來看一下MSDN上面是如何定義open()函數的:
首先是函數原型:
void open(
const char *_Filename,
ios_base::openmode _Mode = ios_base::in | ios_base::out,
int _Prot = (int)ios_base::_Openprot
);
void open(
const char *_Filename,
ios_base::openmode _Mode
);
void open(
const wchar_t *_Filename,
ios_base::openmode _Mode = ios_base::in | ios_base::out,
int _Prot = (int)ios_base::_Openprot
);
void open(
const wchar_t *_Filename,
ios_base::openmode _Mode
);
接下來是參數的說明:
_Filename
The name of the file to open.
打開文件名
_Mode
One of the enumerations in ios_base::openmode.
文件的打開方式(在ios_base::openmode中定義)
_Prot
The default file opening protection.
默認進行文件打開時的保護
OK,我們再來看看ios_base::openmode中定義的打開方式:OK,我們再來看看ios_base::openmode中定義的打開方式:
ios::in, to permit extraction from a stream.
打開文件進行讀操作,即讀取文件中的數據
ios::out, to permit insertion to a stream.
打開文件進行寫操作,即輸出數據到文件中
ios::app, to seek to the end of a stream before each insertion.
打開文件之後文件指針指向文件末尾,只能在文件末尾進行數據的寫入
ios::ate, to seek to the end of a stream when its controlling object is first created.
打開文件之後文件指針指向文件末尾,但是可以在文件的任何地方進行數據的寫入
ios::trunc, to delete contents of an existing file when its controlling object is created.
默認的文件打開方式,若文件已經存在,則清空文件的內容
ios::binary, to read a file as a binary stream, rather than as a text stream.
打開文件爲二進制文件,否則爲文本文件
好了,open()函數的用法全部列舉出來了。下面就針對ios_base::binary的二進制打開方式,我們在來談一談二進制文件的輸出方式和文本文件的輸出方式。
① 文本形式輸出到文件,我們完全可以在open函數的mode選項中調用
ios::out|ios::app
好了,上面這句話說的就是將數據依次輸出。注意,這裏用的是依次,原因就是我們採用了app(append)模式,此表示在文件末尾繼續寫入文件,這就實現了數據的挨個寫入 ^_^。一個完整的程序例子如下:
我們可以看到,people.txt文件中的內容和命令行中的一樣。
② 二進制形式輸出到文件 爲了能夠讓其用二進制方式輸出文件,我們只需要把上面程序的第16行和17行換做
程序的第1行中的標誌binary用於開啓二進制模式,第2行調用了write函數。該函數有兩個參數,第一個是要寫入數據的首地址,在這裏是結構體pe的地址,而第二個參數是要寫入的字符數目,這裏我們用sizeof來計算pe的字符數。具體程序如下:
我們再來看看這個東東的輸出,我們可以看到,以txt文檔打開文件時候,會產生亂碼。這就是因爲txt文件是以文本方式打開的,所以我們看到的都是亂碼。如下圖:
呼呼,以上就是我自認的自己不是很懂的C++關於如何操作文件的記錄,到這裏了~~全文完 ^_^