在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

簡單文件的輸入和輸出步驟

冬至子 ? 來源:iDoitnow ? 作者:艱默 ? 2023-07-18 15:34 ? 次閱讀

1. 簡單的文件I/O

寫入文件

讓程序寫入文件,其步驟大致為如下:

  1. 創建一個ofstream對象來管理輸入流;
  2. 將該對象與特定的文件關聯起來;
  3. 用使用cout的方式使用該對象,唯一的區別是輸出將進入文件,而不是屏幕。

例子:

//需要包含頭文件fstream

ofstream fout;     //#1
fout.open("a.txt");//#2 若a.txt不存在,則會新建一個,若存在,則會清空源文件內容
fout < < "hello";   //#3 將hello寫入a.txt中

:以默認模式打開文件(即上述方式)進行輸出將自動把文件的長度截短為零,這相當于刪除已有的內容。具體原因見本文第三節文件模式中的注】

讀取文件

讀取文件的要求與寫入文件相似:

  1. 創建一個ifstream對象來管理輸入流;
  2. 將該對象與特定的文件關聯起來;
  3. 以使用cin的方式使用該對象。

例子:

//需要包含頭文件fstream

ifstream fin;     //#1
fin.open("a.txt");//#2 
char ch;
fin > > ch;        //#3 讀取一個字符放入ch

:當輸入和輸出流對象過期(如程序終止)時,到文件的連接將自動關閉。另外,也可以使用close()方法來顯式地關閉到文件的連接。關閉這樣的連接并不會刪除流,而只是斷開流到文件的連接。然而,流管理裝置仍被保留。】

流狀態檢查

C++文件流類從ios_base類那里繼承了一個流狀態成員。檢查文件是否成功打開的常見方式如下:

ifstream fin;
fin.open(argv[file]);

if (fin.fail()){...} //判斷文件打開是否成功
if (!fin.good()){...} //判斷文件打開是否成功
if (!fin){...} //判斷文件打開是否成功

//is_open()能夠檢測到這種錯誤以及good()能夠檢測到的錯誤。然而,老式C++實現沒有is_open( )。
if (!fin.is_open()){...} //判斷文件打開是否成功

2. 命令行處理技術

文件處理程序通常使用命令行參數來指定文件。例如:

exc a.txt b.txt

exc為程序可執行文件名,a.txtb.txt為程序exc執行過程中要使用到的文件。要實現上述功能,則程序的主函數應該寫為:

int main(int argc, char* argv[])

argc為命令行中的參數個數,其中包括命令名本身。argv變量為一個指針,它指向一個指向char的指針。這過于抽象,但可以將argv看作一個指針數組,其中的指針指向命令行參數,argv[0]是一個指針,指向存儲第一個命令行參數的字符串的第一個字符,依此類推。也就是說,argv[0]是命令行中的第一個字符串,依此類推。因此上面的例子中:argc為3,argv[0]excargv[1]a.txtargv[2]b.txt

3. 文件模式

文件模式描述的是文件將被如何使用:讀、寫、追加等。將流與文件關聯時(無論是使用文件名初始化文件流對象,還是使用open()方法),都可以提供指定文件模式的第二個參數:

ifstream fin("banjo", mode1); // mode1為文件模式
ofstream fout();
fout.open("harp", mode2); // mode2為文件模式

文件模式的常量有:

1.jpg

ifstream``open()方法和構造函數用ios_base::in(打開文件以讀取)作為模式參數的默認值,而ofstream``open()方法和構造函數用ios_base::out | ios_base::trunc(打開文件,以讀取并截短文件,也就是說,其以前的內容將被刪除)作為默認值。位運算符OR(|)用于將兩個位值合并成一個可用于設置兩個位的值。fstream類不提供默認的模式值,因此在創建這種類的對象時,必須顯式地提供模式。】

如果要保留文件內容,并在文件尾添加(追加)新信息,則可以使用ios_base::app模式:

ofstream fout("bagels", ios_base::out | ios_base::app);//使用|運算符來合并模式,啟用模式out和app

老式C++實現之間可能有一些差異。例如,有些實現允許省略前一例子中的ios_base::out,有些則不允許。如果不使用默認模式,則最安全的方法是顯式地提供所有的模式元素。

要以二進制格式(而不是文本格式)存儲數據,可以使用ofstream對象的write()成員函數。該方法將內存中指定數目的字節復制到文件中。若從二進制文件讀取數據,可以使用ifstream對象的read( )成員函數。該方法從文件中內容復制到目標結構中。這兩者的對應的使用方法如下:

const int LIM = 20;
struct planet
{
    char name[LIM]; // name of planet
    double population; // its population
    double g; // its acceleration of gravity
};
planet pl;
planet p2;

//寫入
//ofstream fout("planets.dat", ios_base:: out | ios_base::app);
//fout < < pl.name < < " " < < pl.population < < " " < < pl.g < < "n";
ofstream fout("planets.dat",
              ios_base:: out | ios_base::app | ios_base::binary);
fout.write( (char *) &pl, sizeof(pl));

//讀取
ifstream fin("planets.dat", ios_base::in | ios_base::binary);
fin.read((char *) &p2, sizeof(p2));

4. 隨機存取

隨機存取指的是直接移動(不是依次移動)到文件的任何位置。要實現讀/寫的效果,需要同時使用in模式和out模式將得到讀/寫模式,要使用|運算符來組合模式。因此,需要使用下面的語句:

fstream finout;//fstream類是從iostream類派生而來的,而后者基于istream和ostream兩個類,因此它繼承了它們的方法。它還繼承了兩個緩沖區,一個用于輸入,一個用于輸出,并能同步化這兩個緩沖區的處理。
finout.open(file, ios_base::in | ios_base::out | ios_base::binary);

接下來,需要一種在文件中移動的方式。fstream類為此繼承了兩個方法:seekg()seekp(),前者將輸入指針移到指定的文件位置,后者將輸出指針移到指定的文件位置(實際上,由于fstream類使用緩沖區來存儲中間數據,因此指針指向的是緩沖區中的位置,而不是實際的文件)。也可以將seekg()用于ifstream對象,將seekp()用于oftream對象。

seekg()seekp()的原型及使用方法如下:

//seekg()
istream & seekg(streamoff, ios_base::seekdir);//第一個原型定位到離第二個參數指定的文件位置特定距離(單位為字節)的位置;streamoff值被用來度量相對于文件特定位置的偏移量(單位為字節)。
istream & seekg(streampos);//第二個原型定位到離文件開頭特定距離(單位為字節)的位置。streampos對應的是距離(單位為字節)。

//seek_dir參數是ios_base類中定義的另一種整型,有3個可能的值:
//常量ios_base::beg指相對于文件開始處的偏移量;
//常量ios_base::cur指相對于當前位置的偏移量;
//常量ios_base::end指相對于文件尾的偏移量。
fin.seekg(30, ios_base::beg); //將讀取位置設置為從文件開頭開始的第31個字節(字節編號為30)
fin.seekg(-1, ios_base::cur); //將讀取位置設置為從當前位置后退1個字節
fin.seekg(0, ios_base::end); //將讀取位置設置為從文件尾0個字節的位置

fin.seekg(112); //第一個字節的編號為0。因此該語句將讀取位置設置為第112個字節,也就是文件中的第113個字節



//seekp()
ostream & seekp(streamoff offset,seek_dir origin); 
ostream & seekp (streampos pos);

fout.seekp(30, ios_base::beg); //將寫入位置設置為從文件開頭開始的第31個字節(字節編號為30)
fout.seekp(-1, ios_base::cur); //將寫入位置設置為從當前位置后退1個字節
fout.seekp(0, ios_base::end); //將寫入位置設置為從文件尾0個字節的位置

fout.seekp(112); //第一個字節的編號為0。因此該語句將寫入位置設置為編號為112的字節,也就是文件中的第113個字節

:如果要檢查文件指針的當前位置,則對于輸入流,可以使用tellg()方法,對于輸出流,可以使用tellp()方法。它們都返回一個表示當前位置的streampos值(以字節為單位,從文件開始處算起)。】

seekg()seekp()函數提供對文件的隨機存取。這些類方法使得能夠將文件指針放置到相對于文件開頭、文件尾和當前位置的某個位置。tellg()tellp()方法報告當前的文件位置。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 處理器
    +關注

    關注

    68

    文章

    19460

    瀏覽量

    231404
  • 連接器
    +關注

    關注

    98

    文章

    14715

    瀏覽量

    137413
  • 緩沖器
    +關注

    關注

    6

    文章

    1974

    瀏覽量

    45703
  • 二進制
    +關注

    關注

    2

    文章

    801

    瀏覽量

    41779
收藏 人收藏

    評論

    相關推薦

    什么是簡單電路?簡述簡單電路的計算步驟?

    什么是簡單電路?簡述簡單電路的計算步驟?僅由串,并聯電阻以及電源所組成的電路,我們稱之為簡單電路。在計算簡單電路時,所有的串并聯電阻可以簡化
    發表于 10-04 15:10 ?6515次閱讀
    什么是<b class='flag-5'>簡單</b>電路?簡述<b class='flag-5'>簡單</b>電路的計算<b class='flag-5'>步驟</b>?

    protel99se gerber文件輸出方法及步驟

    protel99se gerber文件輸出方法及步驟
    發表于 12-28 16:54 ?6063次閱讀
    protel99se gerber<b class='flag-5'>文件</b>的<b class='flag-5'>輸出</b>方法及<b class='flag-5'>步驟</b>

    Allegro生成鉆孔文件步驟

    Allegro生成鉆孔文件步驟 生成鉆孔文件步驟:ALLEGRO TO NC DRILL 1. Manufacture -> NC -> Dr
    發表于 03-21 18:11 ?4845次閱讀
    Allegro生成鉆孔<b class='flag-5'>文件</b>的<b class='flag-5'>步驟</b>

    AD中關于Gerber文件輸出

    PCB設計完成后我們需要進行Gerber文件輸出,方便PCB板廠進行生產,下面以一個6層板為實例,給大家介紹下Gerber文件輸出步驟
    發表于 09-09 16:03 ?0次下載

    文件添加步驟

    Protel庫文件添加詳細步驟
    發表于 11-04 11:15 ?0次下載

    Powerpcb輸出gerber文件步驟

    Powerpcb輸出gerber文件步驟
    發表于 05-26 11:36 ?0次下載

    基于PCB快速打板中的Protel 99 SE轉gerber文件步驟

    本文簡單介紹下基于PCB快速打板中的Protel 99 SE轉gerber文件步驟
    發表于 09-20 19:17 ?2次下載
    基于PCB快速打板中的Protel 99 SE轉gerber<b class='flag-5'>文件</b><b class='flag-5'>步驟</b>

    基于ALLEGRO導出PROE文件步驟

    本文檔內容接受啊了基于ALLEGRO導出PROE文件步驟,供參考。
    發表于 02-08 11:43 ?18次下載

    電腦卡怎么辦簡單步驟

    本視頻主要詳細介紹了電腦卡怎么辦簡單步驟,分別是卸載同類型的軟件、清理回收站、借助軟件清理電腦垃圾、定期清理磁盤碎片、系統垃圾文件、重裝系統。
    的頭像 發表于 03-08 16:22 ?8873次閱讀

    DXP導出SMT坐標文件的簡述步驟詳細說明

    坐標文件是和 SMT 工程師溝通的非常重要的文件。簡述步驟如下:設置左下角為原點; 文件 --》 制造輸出 --》 Gernerates p
    發表于 10-17 17:16 ?0次下載
    DXP導出SMT坐標<b class='flag-5'>文件</b>的簡述<b class='flag-5'>步驟</b>詳細說明

    AltiumDesigner導出Gerber文件步驟詳細教程說明

    導出的Gerber不是一個文件,而是一個文件集合,通常需要打包發給廠家。要生成可以用于生產的Gerber文件一共要進行三次輸出,前兩次使用Gerber Setup(光繪
    發表于 11-28 08:00 ?0次下載
    AltiumDesigner導出Gerber<b class='flag-5'>文件</b>的<b class='flag-5'>步驟</b>詳細教程說明

    VC++簡單輸入輸出教程詳細說明

    iostream.h iostream.h:包含輸入輸出流的頭文件 在使用C++輸入輸出之前,必須在程序的開頭增加一行: #include 《iostream.h》
    發表于 03-19 16:03 ?4次下載
    VC++<b class='flag-5'>簡單</b>的<b class='flag-5'>輸入輸出</b>教程詳細說明

    解析C語言入門基礎之輸入輸出

    01 — 標準輸入和標準輸出 在C語言里要使用標準輸入和標準輸出必須包含stdio.h頭文件,常用的標準
    的頭像 發表于 05-31 14:05 ?3857次閱讀

    JLINK下載Hex文件的詳細步驟

    JLINK下載Hex文件的詳細步驟
    發表于 06-27 09:23 ?0次下載

    PyTorch教程6.6.之文件輸入輸出

    電子發燒友網站提供《PyTorch教程6.6.之文件輸入輸出.pdf》資料免費下載
    發表于 06-05 10:18 ?0次下載
    PyTorch教程6.6.之<b class='flag-5'>文件</b><b class='flag-5'>輸入輸出</b>
    主站蜘蛛池模板: 人人人人凹人人爽人人澡 | 亚洲天天| baoyu污污网站入口免费 | 国产国产人免费人成免费视频 | a成人| 国产精品高清一区二区三区不卡 | 91成人免费 | 久操伊人 | 永久免费在线播放 | 性色视频免费 | 人人草人人 | 五月天婷婷社区 | 日韩黄色网 | 日本免费一区二区视频 | 1024国产看片在线观看 | 黄色在线免费看 | 伊人狼人在线 | 欧美极品第1页专区 | 日本亚洲欧美美色 | 一级毛片在线免费视频 | 成人在线视频网 | 欧美αv| 国产午夜亚洲精品 | 看免费黄色大片 | 天天干天天曰 | 99精品视频在线播放2 | 超级碰碰青草免费视频92 | 国产精品bdsm在线调教 | www.av在线| 婷婷在线网 | 四虎在线免费播放 | 午夜大片免费完整在线看 | 91x视频 | 搞逼综合网 | jk黑色丝袜美腿老师啪啪 | 人人干人人艹 | 精品一区二区三区视频 | 九九全国免费视频 | bt种子天堂 | 两性毛片| 操人视频网站 |