最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

解讀C++編程的相關(guān)文件操作

 更新時(shí)間:2015年09月24日 16:26:49   投稿:goldensun  
這篇文章主要介紹了解讀C++編程的相關(guān)文件操作,是C++入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下

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

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

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

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

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

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

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

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

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

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

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

以上工作可以通過兩種不同的方法實(shí)現(xiàn)。

1) 調(diào)用文件流的成員函數(shù)open。如

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


第2行是調(diào)用輸出文件流的成員函數(shù)open打開磁盤文件f1.dat,并指定它為輸出文件, 文件流對象outfile將向磁盤文件f1.dat輸出數(shù)據(jù)。ios::out是I/O模式的一種,表示以輸出方式打開一個(gè)文件?;蛘吆唵蔚卣f,此時(shí)f1.dat是一個(gè)輸出文件,接收從內(nèi)存輸出的數(shù)據(jù)。

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

2) 在定義文件流對象時(shí)指定參數(shù)
在聲明文件流類時(shí)定義了帶參數(shù)的構(gòu)造函數(shù),其中包含了打開磁盤文件的功能。因此,可以在定義文件流對象時(shí)指定參數(shù),調(diào)用文件流類的構(gòu)造函數(shù)來實(shí)現(xiàn)打開文件的功能。如

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

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

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

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

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

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

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

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

4) 如果打開操作失敗,open函數(shù)的返回值為0(假),如果是用調(diào)用構(gòu)造函數(shù)的方式打開文件的,則流對象的值為0??梢該?jù)此測試打開是否成功。如
 

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


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


關(guān)閉磁盤文件

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

相關(guān)文章

  • C 語言基礎(chǔ)之C 語言三大語句注意事項(xiàng)

    C 語言基礎(chǔ)之C 語言三大語句注意事項(xiàng)

    今天講解的內(nèi)容,則是自己對于這三種語句一些細(xì)節(jié)的簡單介紹,分支語句:if,switch、循環(huán)語句:while,for,do while、goto語句,感興趣的小伙伴可以參考下面具體的文章內(nèi)容
    2021-09-09
  • Qt利用tablewidget模擬手指實(shí)現(xiàn)滑動(dòng)

    Qt利用tablewidget模擬手指實(shí)現(xiàn)滑動(dòng)

    這篇文章主要為大家詳細(xì)介紹了Qt如何利用tablewidget模擬手指實(shí)現(xiàn)滑動(dòng)效果,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Qt有一定的幫助,需要的可以參考一下
    2023-01-01
  • C語言數(shù)據(jù)結(jié)構(gòu)順序表的進(jìn)階講解

    C語言數(shù)據(jù)結(jié)構(gòu)順序表的進(jìn)階講解

    程序中經(jīng)常需要將一組數(shù)據(jù)元素作為整體管理和使用,需要?jiǎng)?chuàng)建這種元素組,用變量記錄它們,傳進(jìn)傳出函數(shù)等。一組數(shù)據(jù)中包含的元素個(gè)數(shù)可能發(fā)生變化,順序表則是將元素順序地存放在一塊連續(xù)的存儲(chǔ)區(qū)里,元素間的順序關(guān)系由它們的存儲(chǔ)順序自然表示
    2022-04-04
  • C++超詳細(xì)講解操作符的重載

    C++超詳細(xì)講解操作符的重載

    C++預(yù)定義中的運(yùn)算符的操作對象只局限于基本的內(nèi)置數(shù)據(jù)類型,但是對于我們自定義的類型(類)是沒有辦法操作的。但是大多時(shí)候我們需要對我們定義的類型進(jìn)行類似的運(yùn)算,這個(gè)時(shí)候就需要我們對這么運(yùn)算符進(jìn)行重新定義,賦予其新的功能,以滿足自身的需求
    2022-06-06
  • C++ Boost TypeTraits庫使用詳解

    C++ Boost TypeTraits庫使用詳解

    Boost是為C++語言標(biāo)準(zhǔn)庫提供擴(kuò)展的一些C++程序庫的總稱。Boost庫是一個(gè)可移植、提供源代碼的C++庫,作為標(biāo)準(zhǔn)庫的后備,是C++標(biāo)準(zhǔn)化進(jìn)程的開發(fā)引擎之一,是為C++語言標(biāo)準(zhǔn)庫提供擴(kuò)展的一些C++程序庫的總稱
    2022-11-11
  • C語言使用單鏈表實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)

    C語言使用單鏈表實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語言使用單鏈表實(shí)現(xiàn)學(xué)生信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • C/C++內(nèi)存管理基礎(chǔ)與面試

    C/C++內(nèi)存管理基礎(chǔ)與面試

    本章主要介紹C語言與C++的內(nèi)存管理,以C++的內(nèi)存分布作為引入,介紹C++不同于C語言的內(nèi)存管理方式(new?delete對比?malloc?free),感興趣的朋友來看看吧
    2022-07-07
  • C++中vector迭代器失效與深淺拷貝問題詳析

    C++中vector迭代器失效與深淺拷貝問題詳析

    迭代器失效就是迭代器底層對應(yīng)指針?biāo)赶虻目臻g倍銷毀了,導(dǎo)致使用了一塊已經(jīng)被釋放了的空間,下面這篇文章主要給大家介紹了C++中vector迭代器失效與深淺拷貝問題的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • 淺談C++中const與constexpr的區(qū)別

    淺談C++中const與constexpr的區(qū)別

    C++11中新增加了用于指示常量表達(dá)式的constexpr關(guān)鍵字。本文將帶大家詳細(xì)了解一下const與constexpr之間的區(qū)別,需要的小伙伴們可以參考一下
    2021-11-11
  • opencv圖片的任意角度旋轉(zhuǎn)實(shí)現(xiàn)示例

    opencv圖片的任意角度旋轉(zhuǎn)實(shí)現(xiàn)示例

    這篇博客將介紹如何使用OpenCV旋轉(zhuǎn)圖像任意角度,實(shí)現(xiàn)各個(gè)角度的旋轉(zhuǎn),具有一定的參考價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-06-06

最新評論

商南县| 东方市| 万州区| 台东市| 奇台县| 彭泽县| 镇安县| 泊头市| 山阴县| 柳林县| 疏附县| 宁夏| 轮台县| 罗平县| 公安县| 隆安县| 彰化县| 九龙城区| 招远市| 望都县| 桃源县| 宁乡县| 龙江县| 察雅县| 崇明县| 綦江县| 察哈| 德化县| 江油市| 旬邑县| 筠连县| 拜泉县| 金乡县| 苏尼特右旗| 汪清县| 怀化市| 龙井市| 荔浦县| 曲周县| 万年县| 长沙县|