99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

簡(jiǎn)單文件的輸入和輸出步驟

冬至子 ? 來(lái)源:iDoitnow ? 作者:艱默 ? 2023-07-18 15:34 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1. 簡(jiǎn)單的文件I/O

寫(xiě)入文件

讓程序?qū)懭胛募?,其步驟大致為如下:

  1. 創(chuàng)建一個(gè)ofstream對(duì)象來(lái)管理輸入流;
  2. 將該對(duì)象與特定的文件關(guān)聯(lián)起來(lái);
  3. 用使用cout的方式使用該對(duì)象,唯一的區(qū)別是輸出將進(jìn)入文件,而不是屏幕。

例子:

//需要包含頭文件fstream

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

:以默認(rèn)模式打開(kāi)文件(即上述方式)進(jìn)行輸出將自動(dòng)把文件的長(zhǎng)度截短為零,這相當(dāng)于刪除已有的內(nèi)容。具體原因見(jiàn)本文第三節(jié)文件模式中的注】

讀取文件

讀取文件的要求與寫(xiě)入文件相似:

  1. 創(chuàng)建一個(gè)ifstream對(duì)象來(lái)管理輸入流;
  2. 將該對(duì)象與特定的文件關(guān)聯(lián)起來(lái);
  3. 以使用cin的方式使用該對(duì)象。

例子:

//需要包含頭文件fstream

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

:當(dāng)輸入和輸出流對(duì)象過(guò)期(如程序終止)時(shí),到文件的連接將自動(dòng)關(guān)閉。另外,也可以使用close()方法來(lái)顯式地關(guān)閉到文件的連接。關(guān)閉這樣的連接并不會(huì)刪除流,而只是斷開(kāi)流到文件的連接。然而,流管理裝置仍被保留?!?/p>

流狀態(tài)檢查

C++文件流類(lèi)從ios_base類(lèi)那里繼承了一個(gè)流狀態(tài)成員。檢查文件是否成功打開(kāi)的常見(jiàn)方式如下:

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

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

//is_open()能夠檢測(cè)到這種錯(cuò)誤以及good()能夠檢測(cè)到的錯(cuò)誤。然而,老式C++實(shí)現(xiàn)沒(méi)有is_open( )。
if (!fin.is_open()){...} //判斷文件打開(kāi)是否成功

2. 命令行處理技術(shù)

文件處理程序通常使用命令行參數(shù)來(lái)指定文件。例如:

exc a.txt b.txt

exc為程序可執(zhí)行文件名,a.txtb.txt為程序exc執(zhí)行過(guò)程中要使用到的文件。要實(shí)現(xiàn)上述功能,則程序的主函數(shù)應(yīng)該寫(xiě)為:

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

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

3. 文件模式

文件模式描述的是文件將被如何使用:讀、寫(xiě)、追加等。將流與文件關(guān)聯(lián)時(shí)(無(wú)論是使用文件名初始化文件流對(duì)象,還是使用open()方法),都可以提供指定文件模式的第二個(gè)參數(shù):

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

文件模式的常量有:

1.jpg

ifstream``open()方法和構(gòu)造函數(shù)用ios_base::in(打開(kāi)文件以讀?。┳鳛槟J絽?shù)的默認(rèn)值,而ofstream``open()方法和構(gòu)造函數(shù)用ios_base::out | ios_base::trunc(打開(kāi)文件,以讀取并截短文件,也就是說(shuō),其以前的內(nèi)容將被刪除)作為默認(rèn)值。位運(yùn)算符OR(|)用于將兩個(gè)位值合并成一個(gè)可用于設(shè)置兩個(gè)位的值。fstream類(lèi)不提供默認(rèn)的模式值,因此在創(chuàng)建這種類(lèi)的對(duì)象時(shí),必須顯式地提供模式?!?/p>

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

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

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

要以二進(jìn)制格式(而不是文本格式)存儲(chǔ)數(shù)據(jù),可以使用ofstream對(duì)象的write()成員函數(shù)。該方法將內(nèi)存中指定數(shù)目的字節(jié)復(fù)制到文件中。若從二進(jìn)制文件讀取數(shù)據(jù),可以使用ifstream對(duì)象的read( )成員函數(shù)。該方法從文件中內(nèi)容復(fù)制到目標(biāo)結(jié)構(gòu)中。這兩者的對(duì)應(yīng)的使用方法如下:

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;

//寫(xiě)入
//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. 隨機(jī)存取

隨機(jī)存取指的是直接移動(dòng)(不是依次移動(dòng))到文件的任何位置。要實(shí)現(xiàn)讀/寫(xiě)的效果,需要同時(shí)使用in模式和out模式將得到讀/寫(xiě)模式,要使用|運(yùn)算符來(lái)組合模式。因此,需要使用下面的語(yǔ)句:

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

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

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

//seekg()
istream & seekg(streamoff, ios_base::seekdir);//第一個(gè)原型定位到離第二個(gè)參數(shù)指定的文件位置特定距離(單位為字節(jié))的位置;streamoff值被用來(lái)度量相對(duì)于文件特定位置的偏移量(單位為字節(jié))。
istream & seekg(streampos);//第二個(gè)原型定位到離文件開(kāi)頭特定距離(單位為字節(jié))的位置。streampos對(duì)應(yīng)的是距離(單位為字節(jié))。

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

fin.seekg(112); //第一個(gè)字節(jié)的編號(hào)為0。因此該語(yǔ)句將讀取位置設(shè)置為第112個(gè)字節(jié),也就是文件中的第113個(gè)字節(jié)



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

fout.seekp(30, ios_base::beg); //將寫(xiě)入位置設(shè)置為從文件開(kāi)頭開(kāi)始的第31個(gè)字節(jié)(字節(jié)編號(hào)為30)
fout.seekp(-1, ios_base::cur); //將寫(xiě)入位置設(shè)置為從當(dāng)前位置后退1個(gè)字節(jié)
fout.seekp(0, ios_base::end); //將寫(xiě)入位置設(shè)置為從文件尾0個(gè)字節(jié)的位置

fout.seekp(112); //第一個(gè)字節(jié)的編號(hào)為0。因此該語(yǔ)句將寫(xiě)入位置設(shè)置為編號(hào)為112的字節(jié),也就是文件中的第113個(gè)字節(jié)

:如果要檢查文件指針的當(dāng)前位置,則對(duì)于輸入流,可以使用tellg()方法,對(duì)于輸出流,可以使用tellp()方法。它們都返回一個(gè)表示當(dāng)前位置的streampos值(以字節(jié)為單位,從文件開(kāi)始處算起)?!?/p>

seekg()seekp()函數(shù)提供對(duì)文件的隨機(jī)存取。這些類(lèi)方法使得能夠?qū)⑽募羔樂(lè)胖玫较鄬?duì)于文件開(kāi)頭、文件尾和當(dāng)前位置的某個(gè)位置。tellg()tellp()方法報(bào)告當(dāng)前的文件位置。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 處理器
    +關(guān)注

    關(guān)注

    68

    文章

    19885

    瀏覽量

    235042
  • 連接器
    +關(guān)注

    關(guān)注

    99

    文章

    15375

    瀏覽量

    140403
  • 緩沖器
    +關(guān)注

    關(guān)注

    6

    文章

    2055

    瀏覽量

    47002
  • 二進(jìn)制
    +關(guān)注

    關(guān)注

    2

    文章

    807

    瀏覽量

    42315
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    什么是簡(jiǎn)單電路?簡(jiǎn)述簡(jiǎn)單電路的計(jì)算步驟?

    什么是簡(jiǎn)單電路?簡(jiǎn)述簡(jiǎn)單電路的計(jì)算步驟?僅由串,并聯(lián)電阻以及電源所組成的電路,我們稱(chēng)之為簡(jiǎn)單電路。在計(jì)算簡(jiǎn)單電路時(shí),所有的串并聯(lián)電阻可以簡(jiǎn)化
    發(fā)表于 10-04 15:10 ?6753次閱讀
    什么是<b class='flag-5'>簡(jiǎn)單</b>電路?簡(jiǎn)述<b class='flag-5'>簡(jiǎn)單</b>電路的計(jì)算<b class='flag-5'>步驟</b>?

    protel99se gerber文件輸出方法及步驟

    protel99se gerber文件輸出方法及步驟
    發(fā)表于 12-28 16:54 ?6236次閱讀
    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
    發(fā)表于 03-21 18:11 ?5018次閱讀
    Allegro生成鉆孔<b class='flag-5'>文件</b>的<b class='flag-5'>步驟</b>

    AD中關(guān)于Gerber文件輸出

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

    庫(kù)文件添加步驟

    Protel庫(kù)文件添加詳細(xì)步驟。
    發(fā)表于 11-04 11:15 ?0次下載

    Powerpcb輸出gerber文件步驟

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

    基于PCB快速打板中的Protel 99 SE轉(zhuǎn)gerber文件步驟

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

    基于ALLEGRO導(dǎo)出PROE文件步驟

    本文檔內(nèi)容接受啊了基于ALLEGRO導(dǎo)出PROE文件步驟,供參考。
    發(fā)表于 02-08 11:43 ?18次下載

    電腦卡怎么辦簡(jiǎn)單步驟

    本視頻主要詳細(xì)介紹了電腦卡怎么辦簡(jiǎn)單步驟,分別是卸載同類(lèi)型的軟件、清理回收站、借助軟件清理電腦垃圾、定期清理磁盤(pán)碎片、系統(tǒng)垃圾文件、重裝系統(tǒng)。
    的頭像 發(fā)表于 03-08 16:22 ?9174次閱讀

    DXP導(dǎo)出SMT坐標(biāo)文件的簡(jiǎn)述步驟詳細(xì)說(shuō)明

    坐標(biāo)文件是和 SMT 工程師溝通的非常重要的文件。簡(jiǎn)述步驟如下:設(shè)置左下角為原點(diǎn); 文件 --》 制造輸出 --》 Gernerates p
    發(fā)表于 10-17 17:16 ?0次下載
    DXP導(dǎo)出SMT坐標(biāo)<b class='flag-5'>文件</b>的簡(jiǎn)述<b class='flag-5'>步驟</b>詳細(xì)說(shuō)明

    AltiumDesigner導(dǎo)出Gerber文件步驟詳細(xì)教程說(shuō)明

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

    VC++簡(jiǎn)單輸入輸出教程詳細(xì)說(shuō)明

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

    解析C語(yǔ)言入門(mén)基礎(chǔ)之輸入輸出

    01 — 標(biāo)準(zhǔn)輸入和標(biāo)準(zhǔn)輸出 在C語(yǔ)言里要使用標(biāo)準(zhǔn)輸入和標(biāo)準(zhǔn)輸出必須包含stdio.h頭文件,常用的標(biāo)準(zhǔn)
    的頭像 發(fā)表于 05-31 14:05 ?4149次閱讀

    JLINK下載Hex文件的詳細(xì)步驟

    JLINK下載Hex文件的詳細(xì)步驟
    發(fā)表于 06-27 09:23 ?0次下載

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

    電子發(fā)燒友網(wǎng)站提供《PyTorch教程6.6.之文件輸入輸出.pdf》資料免費(fèi)下載
    發(fā)表于 06-05 10:18 ?0次下載
    PyTorch教程6.6.之<b class='flag-5'>文件</b><b class='flag-5'>輸入輸出</b>