嵌入式學(xue)習筆記(ji):c++文件(jian)操(cao)作由淺入深,讓你理(li)解透徹(che)
時間:2018-09-05 來源(yuan):未(wei)知
首先(xian)要學(xue)習(xi)文(wen)件操(cao)作我(wo)們就要從簡單(dan)的(de)開始(shi)了(le)解(jie)(jie),只有對簡單(dan)的(de)了(le)解(jie)(jie)透徹,那接下來的(de)更(geng)深入(ru)的(de)學(xue)習(xi)就不是(shi)問題了(le),我(wo)們先(xian)來了(le)解(jie)(jie)C++ 文(wen)件和流
到(dao)目前(qian)為(wei)止,我們(men)已經(jing)使(shi)用了 iostream 標準庫,它提供
了 cin 和 cout 方法分(fen)別用于從(cong)標準(zhun)輸(shu)入(ru)(ru)讀取流(liu)(liu)(liu)和向標準(zhun)輸(shu)出寫(xie)(xie)入(ru)(ru)流(liu)(liu)(liu)。本教(jiao)程介(jie)紹如何從(cong)文件讀取流(liu)(liu)(liu)和向文件寫(xie)(xie)入(ru)(ru)流(liu)(liu)(liu)。這就需要用到
C++ 中另一個標準(zhun)庫 fstream,它定義了三(san)個新(xin)的(de)數據類型:


數據(ju)類型(xing) 描(miao)述
ofstream 該(gai)數據類型表示輸出文(wen)件(jian)流,用于創建(jian)文(wen)件(jian)并(bing)向文(wen)件(jian)寫入信息。
ifstream 該(gai)數據類型表示輸入(ru)文件流,用于從文件讀取信息(xi)。
fstream 該數據類型通常(chang)表(biao)示文件流(liu),且同時(shi)具有 ofstream 和(he) ifstream 兩種功能,這意味著(zhu)它可以創建文件,向文件寫入信(xin)息,從文件讀取(qu)

信息。
要(yao)在(zai) C++ 中(zhong)(zhong)進行文(wen)(wen)件處理,必須在(zai) C++ 源代碼文(wen)(wen)件中(zhong)(zhong)包含頭文(wen)(wen)件 和(he) 。
打開文件
在從文(wen)件讀(du)取(qu)信(xin)息或者(zhe)向文(wen)件寫入信(xin)息之前,必須(xu)先打開(kai)文(wen)件。 ofstream 和(he) fstream 對象(xiang)都可以用(yong)(yong)來打開(kai)文(wen)件進(jin)行(xing)寫操作,如(ru)果只需要打開(kai)文(wen)件進(jin)行(xing)讀(du)操作,則(ze)使用(yong)(yong) ifstream 對象(xiang)。
下(xia)面是 open() 函(han)數的標準語(yu)法,open() 函(han)數是 fstream、 ifstream 和(he) ofstream 對象的一個成員。
void open(const char *filename, ios::openmode mode); 在這里,open() 成員函數(shu)的第一參數(shu)指定要打開的文件的名稱
和位置,第二個參數(shu)定義文(wen)件被打開的(de)模式。
您可以(yi)(yi)把以(yi)(yi)上(shang)兩(liang)種或兩(liang)種以(yi)(yi)上(shang)的模式(shi)結合(he)使(shi)用。例如,如果您想要以(yi)(yi)寫(xie)入模式(shi)打開文件(jian),并(bing)希望(wang)截斷文件(jian),以(yi)(yi)防(fang)文件(jian)已(yi)存(cun)在,那么您可以(yi)(yi)使(shi)用下面的語法:
ofstream outfile;
outfile.open("file.dat", ios::out | ios::trunc );
類(lei)似地,您如果(guo)想要打開(kai)一個(ge)文件用于讀寫,可以使用下面的語
法:
fstream afile;
afile.open("file.dat", ios::out | ios::in ); 關閉文(wen)件
當 C++ 程序終止時,它會(hui)自動(dong)關(guan)閉(bi)刷(shua)新所有(you)流,釋放所有(you)分配的內存,并(bing)關(guan)閉(bi)所有(you)打開的文(wen)件。但(dan)程序員應該養成一個好習慣,在程序終止前關(guan)閉(bi)所有(you)打開的文(wen)件。
下面是(shi) close() 函數的標準(zhun)語(yu)法,close() 函數是(shi) fstream、 ifstream 和(he) ofstream 對象的一(yi)個成員(yuan)。
void close();
寫入文件
在 C++ 編(bian)程中,我(wo)們(men)使用(yong)(yong)流插(cha)入運(yun)算(suan)符( << )向文件寫(xie)入信息,就像使用(yong)(yong)該運(yun)算(suan)符輸出信息到屏(ping)幕上一樣(yang)。唯一不同(tong)的是,在這里您(nin)使用(yong)(yong)的是 ofstream 或 fstream 對象,而不是 cout 對象。
讀取文件
在(zai) C++ 編程(cheng)中,我們使(shi)用流提取(qu)運(yun)算(suan)符(fu)( >> )從文件讀取(qu)信息(xi),就像(xiang)使(shi)用該運(yun)算(suan)符(fu)從鍵(jian)盤輸入信息(xi)一(yi)樣。唯一(yi)不(bu)同的(de)是(shi),在(zai)這里您使(shi)用的(de)是(shi) ifstream 或 fstream 對象(xiang),而不(bu)是(shi) cin 對象(xiang)。
文件位置指針
istream 和(he) ostream 都提供了用于重新定位(wei)文件位(wei)置指針的(de)成員函數。這些成員函數包括關于 istream 的(de) seekg("seek get")和(he)關
于 ostream 的 seekp("seek put")。
seekg 和(he) seekp 的參數(shu)通常是一(yi)個(ge)長整型。第(di)二個(ge)參數(shu)可(ke)以用于(yu)指定(ding)查(cha)找(zhao)方向。查(cha)找(zhao)方向可(ke)以是 ios::beg(默(mo)認的,從流的開(kai)頭開(kai)始定(ding)位(wei)),也(ye)(ye)可(ke)以是 ios::cur(從流的當(dang)前位(wei)置開(kai)始定(ding)位(wei)),也(ye)(ye)可(ke)以
是 ios::end(從流的末(mo)尾開(kai)始定位)。
文(wen)件(jian)位置指(zhi)針(zhen)是一個整數(shu)值,指(zhi)定了從文(wen)件(jian)的起(qi)始位置到指(zhi)針(zhen)所
在位置(zhi)的(de)字節數。下面(mian)是關于定(ding)位 "get" 文件(jian)位置(zhi)指針的(de)實例:
// 定位到(dao) fileObject 的(de)第 n 個字節(假設是(shi) ios::beg)
fileObject.seekg( n );
/ 把文件的讀指(zhi)針從 fileObject 當前位置向后移 n 個字(zi)節
fileObject.seekg( n, ios::cur );
/ 把文件的讀(du)指(zhi)針(zhen)從 fileObject 末尾往回移 n 個字節
fileObject.seekg( n, ios::end );
// 定位到 fileObject 的末(mo)尾(wei)
fileObject.seekg( 0, ios::end );
3.轉換函數
C++ STL 教程
C++ STL(標(biao)準模板庫)是一套功(gong)能強大(da)的 C++ 模板類,提供(gong)了通用(yong)的模板類和函數(shu)(shu)(shu),這些(xie)模板類和函數(shu)(shu)(shu)可以實現多種流行和常用(yong)的算法和數(shu)(shu)(shu)據結(jie)構,如向量、鏈表、隊(dui)列、棧。 C++ 標(biao)準模板庫的核心包(bao)括以下三個(ge)組件:


組件 描述
容器(Containers) 容器是用來管理某一(yi)類(lei)對(dui)象的集合。C++ 提供(gong)了各種不(bu)同類(lei)型的容器,比如(ru) deque、list、vector、map 等。
算法(Algorithms) 算法作(zuo)用(yong)于(yu)容(rong)器。它們提供(gong)了(le)執(zhi)行各(ge)種(zhong)操(cao)作(zuo)的方式,包括對容(rong)器內(nei)容(rong)執(zhi)行初始化、排序、搜(sou)索和轉換(huan)等操(cao)作(zuo)。
迭(die)代器(iterators) 迭(die)代器用于遍歷對象(xiang)集合(he)的元(yuan)素(su)。這些集合(he)可能(neng)是容(rong)器,也可能(neng)是容(rong)器的子(zi)集。
這三個(ge)組件都帶有豐富的預定(ding)義函數(shu),幫助我(wo)們通過簡單的方式(shi)處理復雜(za)的任務(wu)。