亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C語(yǔ)言 文件的打開(kāi)與關(guān)閉詳解及示例代碼

 更新時(shí)間:2016年08月24日 16:08:53   投稿:lqh  
本文主要介紹C語(yǔ)言 文件的基礎(chǔ)知識(shí),這里整理了相關(guān)資料及示例代碼,有興趣的小伙伴可以參考下

在C語(yǔ)言中,文件操作都是由庫(kù)函數(shù)來(lái)完成的,這節(jié)介紹文件的打開(kāi)和關(guān)閉。

文件的打開(kāi)(fopen函數(shù))

fopen() 函數(shù)用來(lái)打開(kāi)一個(gè)文件,它的原型為:

FILE *fopen(char *filename, char *mode);

filename為文件名(包括文件路徑),mode為打開(kāi)方式,它們都是字符串。fopen() 會(huì)獲取文件信息,包括文件名、文件狀態(tài)、當(dāng)前讀寫(xiě)位置等,并將這些信息保存到一個(gè)FILE類(lèi)型的結(jié)構(gòu)體變量中,然后將該變量的地址返回。

FILE是在stdio.h頭文件中定義的一個(gè)結(jié)構(gòu)體,用來(lái)保存文件信息。

如果希望接收 fopen() 的返回值,就需要定義一個(gè) FILE 類(lèi)型的指針。例如:

FILE *fp = ("demo.txt", "r");

表示以“只讀”方式打開(kāi)當(dāng)前目錄下的 demo.txt 文件,并使 fp 指向該文件,這樣就可以通過(guò) fp 來(lái)操作 demo.txt 了。fp 通常被

稱(chēng)為文件指針。又如:

FILE *fp = fopen("D:\\demo.txt","rb");

表示以二進(jìn)制方式打開(kāi) D 盤(pán)下的 demo.txt 文件,允許讀和寫(xiě)。

打開(kāi)方式(mode)有多種,見(jiàn)下表:

打開(kāi)方式 說(shuō)明
r 以只讀方式打開(kāi)文件,只允許讀取,不允許寫(xiě)入。該文件必須存在。
r+ 以讀/寫(xiě)方式打開(kāi)文件,允許讀取和寫(xiě)入。該文件必須存在。
rb+ 以讀/寫(xiě)方式打開(kāi)一個(gè)二進(jìn)制文件,允許讀/寫(xiě)數(shù)據(jù)。
rt+ 以讀/寫(xiě)方式打開(kāi)一個(gè)文本文件,允許讀和寫(xiě)。
w 以只寫(xiě)方式打開(kāi)文件,若文件存在則長(zhǎng)度清為0,即該文件內(nèi)容消失,若不存在則創(chuàng)建該文件。
w+ 以讀/寫(xiě)方式打開(kāi)文件,若文件存在則文件長(zhǎng)度清為零,即該文件內(nèi)容會(huì)消失。若文件不存在則建立該文件。
a 以追加的方式打開(kāi)只寫(xiě)文件。若文件不存在,則會(huì)建立該文件,如果文件存在,寫(xiě)入的數(shù)據(jù)會(huì)被加到文件尾,即文件原先的內(nèi)容會(huì)被保留(EOF符保留)。
a+ 以追加方式打開(kāi)可讀/寫(xiě)的文件。若文件不存在,則會(huì)建立該文件,如果文件存在,則寫(xiě)入的數(shù)據(jù)會(huì)被加到文件尾后,即文件原先的內(nèi)容會(huì)被保留(原來(lái)的EOF符 不保留)。
wb 以只寫(xiě)方式打開(kāi)或新建一個(gè)二進(jìn)制文件,只允許寫(xiě)數(shù)據(jù)。
wb+ 以讀/寫(xiě)方式打開(kāi)或建立一個(gè)二進(jìn)制文件,允許讀和寫(xiě)。
wt+ 以讀/寫(xiě)方式打開(kāi)或建立一個(gè)文本文件,允許讀寫(xiě)。
at+ 以讀/寫(xiě)方式打開(kāi)一個(gè)文本文件,允許讀或在文本末追加數(shù)據(jù)。
ab+ 以讀/寫(xiě)方式打開(kāi)一個(gè)二進(jìn)制文件,允許讀或在文件末追加數(shù)據(jù)。

文本文件和二進(jìn)制文件的區(qū)別請(qǐng)查看:C語(yǔ)言fopen()打開(kāi)文本文件與二進(jìn)制文件的區(qū)別

幾點(diǎn)說(shuō)明

1) 文件打開(kāi)方式由r、w、a、t、b、+ 六個(gè)字符拼成,各字符的含義是:

  1. r(read):讀
  2. w(write):寫(xiě)
  3. a(append):追加
  4. t(text):文本文件,可省略不寫(xiě)
  5. b(banary):二進(jìn)制文件
  6. +:讀和寫(xiě)

2) 如果沒(méi)有“b”字符,文件以文本方式打開(kāi)。

3) 凡用“r”打開(kāi)一個(gè)文件時(shí),該文件必須已經(jīng)存在。

4) 在打開(kāi)一個(gè)文件時(shí),如果出錯(cuò),fopen將返回一個(gè)空指針值NULL。在程序中可以用這一信息來(lái)判別是否完成打開(kāi)文件的工作,并作相應(yīng)的處理。因此常用以下程序段打開(kāi)文件:

if( (fp=fopen("D:\\demo.txt","rb") == NULL ){
  printf("Error on open D:\\demo.txt file!");
  getch();
  exit(1);
}

這段程序的意義是,如果返回的指針為空,表示不能打開(kāi)D盤(pán)根目錄下的 demo.txt 文件,并給出提示信息“error on open D:\\demo.txt file!”。第3行g(shù)etch()的功能是從鍵盤(pán)輸入一個(gè)字符,但不在屏幕上顯示。在這里,該行的作用是等待,只有當(dāng)用戶(hù)從鍵盤(pán)敲任一鍵時(shí),程序才繼續(xù)執(zhí)行,因此用戶(hù)可利用這個(gè)等待時(shí)間閱讀出錯(cuò)提示。敲鍵后執(zhí)行exit(1)退出程序。

5) 把一個(gè)文本文件讀入內(nèi)存時(shí),要將ASCII碼轉(zhuǎn)換成二進(jìn)制碼,而把文件以文本方式寫(xiě)入磁盤(pán)時(shí),也要把二進(jìn)制碼轉(zhuǎn)換成ASCII碼,因此文本文件的讀寫(xiě)要花費(fèi)較多的轉(zhuǎn)換時(shí)間。對(duì)二進(jìn)制文件的讀寫(xiě)不存在這種轉(zhuǎn)換。

6) 標(biāo)準(zhǔn)輸入文件 stdin(鍵盤(pán))、標(biāo)準(zhǔn)輸出文件 stdout(顯示器)、標(biāo)準(zhǔn)錯(cuò)誤文件 stderr(顯示器)是由系統(tǒng)打開(kāi)的,可直接使用。

文件關(guān)閉(fclose函數(shù))

文件一旦使用完畢,應(yīng)該用fclose()函數(shù)把文件關(guān)閉,以釋放相關(guān)資源,避免數(shù)據(jù)丟失。fclose() 的原型為:

int fclose(FILE *fp);

fp 為文件指針。例如:

fclose(fp);

文件正常關(guān)閉時(shí),fclose() 的返回值為0,如果返回非零值則表示有錯(cuò)誤發(fā)生。

以上就是對(duì)文件的基礎(chǔ)資料進(jìn)行的詳解,后續(xù)繼續(xù)補(bǔ)充相關(guān)資料,謝謝大家對(duì)本站的支持!

相關(guān)文章

  • QT基于TCP實(shí)現(xiàn)網(wǎng)絡(luò)聊天室程序

    QT基于TCP實(shí)現(xiàn)網(wǎng)絡(luò)聊天室程序

    這篇文章主要為大家詳細(xì)介紹了QT基于TCP實(shí)現(xiàn)網(wǎng)絡(luò)聊天室程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • C++超詳細(xì)分析函數(shù)重載的使用

    C++超詳細(xì)分析函數(shù)重載的使用

    C++?允許多個(gè)函數(shù)擁有相同的名字,只要它們的參數(shù)列表不同就可以,這就是函數(shù)的重載(Function?Overloading),借助重載,一個(gè)函數(shù)名可以有多種用途
    2022-04-04
  • C++實(shí)現(xiàn)LeetCode(5.最長(zhǎng)回文子串)

    C++實(shí)現(xiàn)LeetCode(5.最長(zhǎng)回文子串)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(5.最長(zhǎng)回文子串),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • 解決C++中事件不響應(yīng)的方法詳解

    解決C++中事件不響應(yīng)的方法詳解

    本篇文章是對(duì)C++事件不響應(yīng)的解決方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • 如何優(yōu)雅地使用c語(yǔ)言編寫(xiě)爬蟲(chóng)

    如何優(yōu)雅地使用c語(yǔ)言編寫(xiě)爬蟲(chóng)

    如何優(yōu)雅地使用c語(yǔ)言編寫(xiě)爬蟲(chóng),本文介紹cspider爬蟲(chóng)庫(kù),這個(gè)cspider爬蟲(chóng)庫(kù)的使命在于,我們能夠使用c語(yǔ)言,依然能夠優(yōu)雅地編寫(xiě)爬蟲(chóng)程序,需要的朋友可以參考下
    2015-12-12
  • Linux中利用c語(yǔ)言刪除某個(gè)目錄下的文件

    Linux中利用c語(yǔ)言刪除某個(gè)目錄下的文件

    這篇文章主要給大家介紹了Linux中利用c語(yǔ)言刪除某個(gè)目錄下文件的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • C語(yǔ)言格式輸出二進(jìn)制的2種方法總結(jié)

    C語(yǔ)言格式輸出二進(jìn)制的2種方法總結(jié)

    眾所周知C中以八進(jìn)制,十進(jìn)制和十六進(jìn)制都可以通過(guò)%o,%d和%x輕松實(shí)現(xiàn),然而唯獨(dú)沒(méi)有提供二進(jìn)制輸出的快速方式,下面這篇文章主要給大家介紹了關(guān)于C語(yǔ)言格式輸出二進(jìn)制的2種方法,需要的朋友可以參考下
    2022-08-08
  • C++11右值引用和移動(dòng)語(yǔ)義的實(shí)例解析

    C++11右值引用和移動(dòng)語(yǔ)義的實(shí)例解析

    左值和右值都是針對(duì)表達(dá)式,左值是指表達(dá)式結(jié)束后依然存在的持久對(duì)象,右值是指表達(dá)式結(jié)束時(shí)就不再存在的臨時(shí)對(duì)象,下面這篇文章主要給大家介紹了關(guān)于C++11右值引用和移動(dòng)語(yǔ)義的相關(guān)資料,需要的朋友可以參考下
    2022-09-09
  • C/C++多態(tài)深入探究原理

    C/C++多態(tài)深入探究原理

    多態(tài)按字面的意思就是多種形態(tài)。當(dāng)類(lèi)之間存在層次結(jié)構(gòu),并且類(lèi)之間是通過(guò)繼承關(guān)聯(lián)時(shí),就會(huì)用到多態(tài)。C++?多態(tài)意味著調(diào)用成員函數(shù)時(shí),會(huì)根據(jù)調(diào)用函數(shù)的對(duì)象的類(lèi)型來(lái)執(zhí)行不同的函數(shù)
    2022-06-06
  • c語(yǔ)言基于stdarg.h的可變參數(shù)函數(shù)的用法

    c語(yǔ)言基于stdarg.h的可變參數(shù)函數(shù)的用法

    本篇文章主要介紹了c語(yǔ)言基于stdarg.h的可變參數(shù)函數(shù)的用法,詳細(xì)的介紹了可變參數(shù)函數(shù)的詳細(xì)用法和源碼實(shí)例,有興趣的可以了解一下
    2017-07-07

最新評(píng)論