亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

解讀C++編程的相關文件操作

2020-01-26 14:50:49
字體:
來源:轉載
供稿:網友

C++文件的概念
迄今為止,我們討論的輸入輸出是以系統指定的標準設備(輸入設備為鍵盤,輸出設備為顯示器)為對象的。在實際應用中,常以磁盤文件作為對象。即從磁盤文件讀取數據,將數據輸出到磁盤文件。磁盤是計算機的外部存儲器,它能夠長期保留信息,能讀能寫,可以刷新重寫,方便攜帶,因而得到廣泛使用。

文件(file)是程序設計中一個重要的概念。所謂“文件”,一般指存儲在外部介質上數據的集合。一批數據是以文件的形式存放在外部介質(如磁盤、光盤和U盤)上的。操 作系統是以文件為單位對數據進行管理的,也就是說,如果想找存在外部介質上的數據, 必須先按文件名找到所指定的文件,然后再從該文件中讀取數據。要向外部介質上存儲數據也必須先建立一個文件(以文件名標識),才能向它輸出數據。

外存文件包括磁盤文件、光盤文件和U盤文件。目前使用最廣泛的是磁盤文件,為敘述方便,教程中凡用到外存文件的地方均以磁盤文件來代表,在程序中對光盤文件和U盤文件的使用方法與磁盤文件相同。

對用戶來說,常用到的文件有兩大類,一類是程序文件(program file),如C++的源程序文件(.cpp)、目標文件(.obj)、可執行文件(.exe)等。一類是數據文件(data file), 在程序運行時,常常需要將一些數據(運行的最終結果或中間數據)輸出到磁盤上存放起來,以后需要時再從磁盤中輸入到計算機內存。這種磁盤文件就是數據文件。程序中的輸入和輸出的對象就是數據文件。

根據文件中數據的組織形式,可分為ASCII文件和二進制文件。ASCII文件又稱文本(text)文件或字符文件,它的每一個字節放一個ASCII代碼,代表一個字符。二進制文件又稱內部格式文件或字節文件,是把內存中的數據按其在內存中的存儲形式原樣輸出到磁盤上存放。

對于字符信息,在內存中是以ASCII代碼形式存放的,因此,無論用ASCII文件輸出還是用二進制文件輸出,其數據形式是一樣的。但是對于數值數據,二者是不同的。例如有一個長整數100000,在內存中占4個字節,如果按內部格式直接輸出,在磁盤文件中占 4個字節,如果將它轉換為ASCII碼形式輸出,則要占6個字節。

用ASCII碼形式輸出的數據是與字符一一對應的,一個字節代表一個字符,可以直接在屏幕上顯示或打印出來。這種方式使用方便,比較直觀,便于閱讀,便于對字符逐個進行輸入輸出。但一般占存儲空間較多,而且要花費轉換時間(二進制形式與ASCII碼間的轉換)。用內部格式(二進制形式)輸出數值,可以節省外存空間,而且不需要轉換時間,但一個字節并不對應一個字符,不能直接顯示文件中的內容。如果在程序運行過程中有些中間結果數據暫時保存在磁盤文件中,以后又需要輸入到內存的,這時用二進制文件保存是最合適的。如果是為了能顯示和打印以供閱讀,則應按ASCII碼形式輸出。此時得到的是ASCII文件,它的內容可以直接在顯示屏上觀看。

C++提供了低級的I/O功能和高級的I/O功能。高級的I/O功能是把若干個字節組合為一個有意義的單位(如整數、單精度數、雙精度數、字符串或用戶自定義的類型的數據),然后以ASCII字符形式輸入和輸出。例如將數據從內存送到顯示器輸出,就屬于高級I/O功能,先將內存中的數據轉換為ASCII字符,然后分別按整數、單精度數、雙精度數等形式輸出。這種面向類型的輸入輸出在程序中用得很普遍,用戶感到方便。但在傳輸大容量的文件時由于數據格式轉換,速度較慢,效率不高。

所謂低級的I/O功能是以字節為單位輸入和輸出的,在輸入和輸出時不進行數據格式的轉換。這種輸入輸出是以二進制形式進行的。通常用來在內存和設備之間傳輸一批字節。這種輸入輸出速度快、效率高,一般大容量的文件傳輸用無格式轉換的I/O。但使用時會感到不大方便。

C++文件的打開與關閉
這里講一下如何打開和關閉磁盤上的文件,其他外設(U盤、光盤等)上的文件與此相同。
打開文件

所謂打開(open)文件是一種形象的說法,如同打開房門就可以進入房間活動一樣。 打開文件是指在文件讀寫之前做必要的準備工作,包括:
為文件流對象和指定的磁盤文件建立關聯,以便使文件流流向指定的磁盤文件。
指定文件的工作方式,如,該文件是作為輸入文件還是輸出文件,是ASCII文件還是二進制文件等。

以上工作可以通過兩種不同的方法實現。

1) 調用文件流的成員函數open。如

  ofstream outfile; //定義ofstream類(輸出文件流類)對象outfile  outfile.open("f1.dat",ios::out); //使文件流與f1.dat文件建立關聯


第2行是調用輸出文件流的成員函數open打開磁盤文件f1.dat,并指定它為輸出文件, 文件流對象outfile將向磁盤文件f1.dat輸出數據。ios::out是I/O模式的一種,表示以輸出方式打開一個文件。或者簡單地說,此時f1.dat是一個輸出文件,接收從內存輸出的數據。

調用成員函數open的一般形式為:
    文件流對象.open(磁盤文件名, 輸入輸出方式);
磁盤文件名可以包括路徑,如"c:/new//f1.dat",如缺省路徑,則默認為當前目錄下的文件。

2) 在定義文件流對象時指定參數
在聲明文件流類時定義了帶參數的構造函數,其中包含了打開磁盤文件的功能。因此,可以在定義文件流對象時指定參數,調用文件流類的構造函數來實現打開文件的功能。如

  ostream outfile("f1.dat",ios::out);

一般多用此形式,比較方便。作用與open函數相同。

輸入輸出方式是在ios類中定義的,它們是枚舉常量,有多種選擇,見表

幾點說明:
1) 新版本的I/O類庫中不提供ios::nocreate和ios::noreplace。

2) 每一個打開的文件都有一個文件指針,該指針的初始位置由I/O方式指定,每次讀寫都從文件指針的當前位置開始。每讀入一個字節,指針就后移一個字節。當文件指針移到最后,就會遇到文件結束EOF(文件結束符也占一個字節,其值為-1),此時流對象的成員函數eof的值為非0值(一般設為1),表示文件結束了。

3) 可以用“位或”運算符“|”對輸入輸出方式進行組合,如表13.6中最后3行所示那樣。還可以舉出下面一些例子:

  ios::in | ios:: noreplace //打開一個輸入文件,若文件不存在則返回打開失敗的信息  ios::app | ios::nocreate //打開一個輸出文件,在文件尾接著寫數據,若文件不存在,則返回打開失敗的信息  ios::out l ios::noreplace //打開一個新文件作為輸出文件,如果文件已存在則返回打開失敗的信息  ios::in l ios::out I ios::binary //打開一個二進制文件,可讀可寫

但不能組合互相排斥的方式,如 ios::nocreate l ios::noreplace。

4) 如果打開操作失敗,open函數的返回值為0(假),如果是用調用構造函數的方式打開文件的,則流對象的值為0。可以據此測試打開是否成功。如
 

  if(outfile.open("f1.bat", ios::app) ==0)    cout <<"open error";


  if( !outfile.open("f1.bat", ios::app) )    cout <<"open error";


關閉磁盤文件

在對已打開的磁盤文件的讀寫操作完成后,應關閉該文件。關閉文件用成員函數close。如
    outfile.close( );  //將輸出文件流所關聯的磁盤文件關閉
所謂關閉,實際上是解除該磁盤文件與文件流的關聯,原來設置的工作方式也失效,這樣,就不能再通過文件流對該文件進行輸入或輸出。此時可以將文件流與其他磁盤文件建立關聯,通過文件流對新的文件進行輸入或輸出。如
    outfile.open("f2.dat",ios::app|ios::nocreate);
此時文件流outfile與f2.dat建立關聯,并指定了f2.dat的工作方式。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲999一在线观看www| 日韩精品免费看| 深夜福利日韩在线看| 精品夜色国产国偷在线| 日韩在线一区二区三区免费视频| 亚洲一区二区免费| 国产精品视频精品| 久久精品国产一区| 日韩在线观看视频免费| 久久99精品久久久久久琪琪| 欧美有码在线视频| 欧美二区乱c黑人| 国产成人激情视频| 青草青草久热精品视频在线观看| 国产精品美女www爽爽爽视频| 日本免费久久高清视频| www.国产一区| 欧美成人免费观看| 欧美精品久久久久久久久久| 日韩av片永久免费网站| 亚洲精品在线视频| 国产日韩欧美成人| 国产在线视频欧美| 国产亚洲激情视频在线| 国产欧美精品一区二区三区介绍| 亚洲人成在线观看| 亚洲人成毛片在线播放| 国产成人一区二区在线| 一道本无吗dⅴd在线播放一区| 精品国产精品自拍| 国产精品偷伦视频免费观看国产| 久久夜色精品亚洲噜噜国产mv| 日韩av电影院| 亚洲大胆人体av| 午夜精品一区二区三区在线视| 久久影视电视剧免费网站清宫辞电视| 精品久久久国产| 日韩在线观看免费全集电视剧网站| 欧美最顶级的aⅴ艳星| 亚洲精品色婷婷福利天堂| 91免费看片在线| 55夜色66夜色国产精品视频| 日韩av电影手机在线观看| 久久这里只有精品99| 国产精品极品在线| 久久综合伊人77777蜜臀| 91精品视频在线免费观看| 国产精品久久久久久久久久久久久| 欧美成人手机在线| 在线观看欧美日韩国产| 国产欧美精品一区二区三区-老狼| 欧美影院久久久| 5278欧美一区二区三区| 成人福利在线观看| 热久久免费视频精品| 国产精品成人国产乱一区| 国产精品女主播视频| 亚洲免费视频在线观看| 国产精品一区电影| 久久视频在线视频| 日韩精品亚洲元码| 亚洲天堂开心观看| 日本一区二区在线免费播放| 久久久久久久久爱| 欧美乱妇高清无乱码| 欧美黑人xxxⅹ高潮交| 亚洲综合在线中文字幕| 伊人成人开心激情综合网| 亚洲另类图片色| 精品久久久av| 欧美成人久久久| 精品视频偷偷看在线观看| 欧美日韩在线看| 亚洲一区二区三区香蕉| 国产精品视频播放| 韩国三级日本三级少妇99| 日韩av电影在线免费播放| www.日韩不卡电影av| 欧美洲成人男女午夜视频| 日韩国产高清视频在线| 免费91麻豆精品国产自产在线观看| 91情侣偷在线精品国产| 国产精品免费小视频| 国产亚洲免费的视频看| 欧美激情亚洲自拍| 98精品在线视频| 黄色成人在线播放| 草民午夜欧美限制a级福利片| 欧美中文字幕在线播放| 久久成年人视频| 国产亚洲欧美日韩精品| 97免费视频在线播放| 国产精品手机播放| 91高潮精品免费porn| 欧美巨猛xxxx猛交黑人97人| 精品久久久久久中文字幕大豆网| 欧美成人手机在线| 亚洲欧洲日产国码av系列天堂| 国产精品久久久久久亚洲调教| 国产成人精品在线视频| 91精品国产色综合久久不卡98口| 国产福利视频一区| 国产91在线播放| 一本色道久久88亚洲综合88| 色与欲影视天天看综合网| 欧美精品videofree1080p| 亚洲另类激情图| 国产精品美女www爽爽爽视频| 亚洲欧美一区二区三区久久| 51精品国产黑色丝袜高跟鞋| 亚洲精品国偷自产在线99热| 欧美野外猛男的大粗鳮| 亚洲在线免费视频| 97视频在线观看亚洲| 欧美片一区二区三区| 国产精品一区久久| 久久中文久久字幕| 亚洲第一在线视频| 国产亚洲精品久久久久久| 国产精品久久久久秋霞鲁丝| 亚洲精品动漫久久久久| www.美女亚洲精品| 欧美成人网在线| 国产91在线视频| 欧美第一页在线| 色偷偷88888欧美精品久久久| 一本一本久久a久久精品综合小说| 国产噜噜噜噜噜久久久久久久久| 亚洲无亚洲人成网站77777| 国产精品成人在线| 91在线中文字幕| 亚洲自拍偷拍色图| 欧美乱大交做爰xxxⅹ性3| 亚洲精品国产免费| 欧美一级黑人aaaaaaa做受| 日韩综合视频在线观看| 国产视频在线一区二区| 久久成人免费视频| 欧美日韩国产一区二区三区| 日韩免费观看网站| 午夜精品久久久久久99热软件| 亚洲午夜精品久久久久久性色| 欧洲亚洲免费视频| 欧美xxxx14xxxxx性爽| 欧美日韩国产色视频| 日韩av成人在线观看| 欧美福利视频网站| 久久久久久久久久国产| 日韩欧美精品中文字幕| 91香蕉嫩草影院入口| 色偷偷综合社区| 上原亚衣av一区二区三区| 96精品视频在线| 欧美国产日产韩国视频| 亚洲天堂男人天堂| 欧美巨大黑人极品精男| 不卡在线观看电视剧完整版| 成人黄色短视频在线观看| 精品在线欧美视频| 色诱女教师一区二区三区| 77777少妇光屁股久久一区| 亚洲a在线观看| 中文字幕精品一区二区精品| 成人黄色生活片|