日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++的文件操作

發布時間:2025/3/20 c/c++ 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++的文件操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

很多人在C++編程中習慣使用ANSI C下的文件類型指針FILE來執行文件的有關操作,這難免影響C++程序的總體美觀性。另外,C++標準IO庫中提供了更為完善、易用的文件操作方法,所以建議使用標準庫來實現文件的輸入/輸出,培養一種好的編程習慣。

1.文件的輸入輸出

文件操作的頭文件有:ifstream提供文件讀取功能;ofstream提供文件寫入功能;fstream提供文件的讀寫功能(包括了前兩類的功能,實現對同一文件的讀寫雙操作)。
a.定義對象

ifstream infile; //定義輸入對象 ofstream outfile; //定義輸出對象

b.在使用fstream對象之前,還必須使這些對象綁定要讀寫的文件

infile.open ("in.txt"); //要輸入in.txt文件 outfile.open ("out.txt"); //要輸出out.txt文件

當然,fstream類提供了構造函數,可以在定義對象時初始化實現上述兩步

ifstream infile ("in.txt"); //定義infile對象,輸入in.txt文件內容 ofstream outfile ("out.txt"); //定義outfile對象,輸出內容到out.txt文件

c.檢查文件打開是否成功

if (!infile) { cout << "error: unable to open the file" << endl;return -1; }

d.文件內容的處理
I.成員函數eof()用來檢測是否到達文件尾,如果到達文件尾返回非0值,否則返回0

//輸入文件,進行處理時使用 if (!infile.eof()) {process(); }

II.文件分為文本文件和二進制文件,對文本文件的處理比較簡單,用插入器和析取器就可以了;而對于二進制的處理要復雜些,下要分別介紹這兩種方式
文本文件:用插入器(<<)向文件輸出;用析取器(>>)從文件輸入。假設infile以輸入方式打開,outfile以輸出打開

outfile<<"向文件輸出"; string word; infile>>word; //文件內容輸入到word,word是文件中某個字符串

這種方式還有一種簡單的格式化能力,比如可以指定輸出為16進制等等

操縱符功能輸入/輸出
dec格式化為十進制數值數據輸入和輸出
hex 格式化為十六進制數值數據輸入和輸出
oct格式化為八進制數值數據輸入和輸出
setpxecision(int p)設置浮點數的精度位數輸出
endl輸出一個換行符并刷新此流輸出
ends輸出一個空字符輸出

比如要把123當作十六進制輸出:outfile<<hex<<123;要把3.1415926以5位精度輸出:outfile<<setpxecision(5)<<3.1415926
getline函數,輸入文件的一行,函數原型

istream& getline (istream& is, string& str, char delim); istream& getline (istream& is, string& str);

從 is 中讀取字符串存入 str 中,直到遇到分隔符delim為止。對于第二種形式,getline遇到 '\n’ 停止。執行過程中,如果delim出現,它會被讀取并丟棄,下次輸入將在它之后開始。
二進制文件:put()函數向流寫入一個字符,其原型是ofstream &put(char ch),使用也比較簡單,如outfile.put('c');就是向流寫一個字符'c'。
get()函數比較靈活,有3種常用的重載形式:
一種就是和put()對應的形式:ifstream &get(char &ch);功能是從流中讀取一個字符,結果保存在引用ch中,如果到文件尾,返回空字符。如infile.get(x);表示從文件中讀取一個字符,并把讀取的字符保存在x中。
另一種重載形式的原型是: int get();這種形式是從流中返回一個字符,如果到達文件尾,返回EOF,如x=file2.get();和上例功能是一樣的。
還有一種形式的原型是:ifstream &get(char *buf,int num,char delim=' ');這種形式把字符讀入由 buf 指向的數組,直到讀入了 num 個字符或遇到了由 delim 指定的字符,如果沒使用 delim 這個參數,將使用缺省值換行符' '。
讀寫二進制數據塊,要使用成員函數read()和write()成員函數,它們原型如下:

read (unsigned char *buf, int num); write (const unsigned char *buf, int num);

III.文件的定位,C++的文件定位分為讀位置和寫位置的定位,對應的成員函數是 seekg()和 seekp(),seekg()是設置讀位置,seekp是設置寫位置。它們最通用的形式如下:

istream &seekg (streamoff offset, seek_dir origin); ostream &seekp (streamoff offset, seek_dir origin);

offset定義了偏移量,seek_dir 表示移動的基準位置,是一個有以下值的枚舉:
ios::beg: 文件開頭
ios::cur: 文件當前位置
ios::end: 文件結尾
這兩個函數一般用于二進制文件(字節),因為文本文件會因為系統對字符的解釋而可能與預想的值不同。

file1.seekg (1234,ios::cur); //把文件的讀指針從當前位置向后移1234個字節 file2.seekp (1234,ios::beg); //把文件的寫指針從文件開頭向后移1234個字節

e.文件關閉
程序結束或fstream對象與另一文件關聯時,必須先關閉現在的文件。

infile.close(); //關閉infile文件

2.文件模式

在打開文件時,無論是調用open還是以文件名作為流初始化的一部分,都需要指定文件模式。文件流構造函數和open函數都提供了默認參數來設置文件模式,默認值因流類型的不同而不同。常用的文件模式與含義如下:

文件模式含義
in打開文件作讀操作
out打開文件作寫操作
app在每次寫之前找到文件尾
ate打開文件時把文件定位在文件尾
trunc打開文件時清空已存在的文件流
binary以二進制模式進行IO操作

以binary模式打開的流將文件以字節序列的形式處理,而不解釋流中的字符。
默認情況下,與ifstream流對相關聯的文件以in模式打開,與ofstream關聯文件以out模式打開。以out模式打開的文件會被清空,丟棄該文件存儲的所有數據,從效果來看,為ofstream對象指定out模式等效于指定了out和trunc模式。
模式的組合,多個文件模式可以同時指定,但是有些組合是沒有意義的,常見的組合模式如下

組合模式含義
out | app打開文件做寫操作,文件尾寫入
out | trunc打開文件做寫操作,刪除文件已有數據(與out相同)
in | out打開文件做讀、寫操作,定位到文件開頭處
in | out | trunc打開文件做讀、寫操作,刪除文件中已有數據
in | out | ate打開文件做讀、寫操作,定位到文件末尾處
…………

總結

以上是生活随笔為你收集整理的C++的文件操作的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。