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

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

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

C程序員如何創(chuàng)建、打開、關(guān)閉文本文件或二進(jìn)制文件

電子工程師 ? 來源:未知 ? 作者:李倩 ? 2018-11-08 14:38 ? 次閱讀

我們講解了 C 語言處理的標(biāo)準(zhǔn)輸入和輸出設(shè)備。本次我們將介紹 C 程序員如何創(chuàng)建、打開、關(guān)閉文本文件或二進(jìn)制文件。

一個(gè)文件,無論它是文本文件還是二進(jìn)制文件,都是代表了一系列的字節(jié)。C 語言不僅提供了訪問頂層的函數(shù),也提供了底層(OS)調(diào)用來處理存儲(chǔ)設(shè)備上的文件。本章將講解文件管理的重要調(diào)用。

打開文件

您可以使用fopen( )函數(shù)來創(chuàng)建一個(gè)新的文件或者打開一個(gè)已有的文件,這個(gè)調(diào)用會(huì)初始化類型FILE的一個(gè)對(duì)象,類型FILE包含了所有用來控制流的必要的信息。下面是這個(gè)函數(shù)調(diào)用的原型:

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

在這里,filename是字符串,用來命名文件,訪問模式mode的值可以是下列值中的一個(gè):

如果處理的是二進(jìn)制文件,則需使用下面的訪問模式來取代上面的訪問模式:

"rb","wb","ab","rb+","r+b","wb+","w+b","ab+","a+b"

關(guān)閉文件

為了關(guān)閉文件,請(qǐng)使用 fclose( ) 函數(shù)。函數(shù)的原型如下:

int fclose( FILE *fp );

如果成功關(guān)閉文件,fclose( )函數(shù)返回零,如果關(guān)閉文件時(shí)發(fā)生錯(cuò)誤,函數(shù)返回EOF。這個(gè)函數(shù)實(shí)際上,會(huì)清空緩沖區(qū)中的數(shù)據(jù),關(guān)閉文件,并釋放用于該文件的所有內(nèi)存。EOF 是一個(gè)定義在頭文件stdio.h中的常量。

C 標(biāo)準(zhǔn)庫提供了各種函數(shù)來按字符或者以固定長(zhǎng)度字符串的形式讀寫文件。

寫入文件

下面是把字符寫入到流中的最簡(jiǎn)單的函數(shù):

int fputc(int c, FILE *fp );

函數(shù)fputc()把參數(shù) c 的字符值寫入到 fp 所指向的輸出流中。如果寫入成功,它會(huì)返回寫入的字符,如果發(fā)生錯(cuò)誤,則會(huì)返回EOF。您可以使用下面的函數(shù)來把一個(gè)以 null 結(jié)尾的字符串寫入到流中:

int fputs(constchar*s, FILE *fp );

函數(shù)fputs()把字符串s寫入到 fp 所指向的輸出流中。如果寫入成功,它會(huì)返回一個(gè)非負(fù)值,如果發(fā)生錯(cuò)誤,則會(huì)返回EOF。您也可以使用int fprintf(FILE *fp,const char *format, ...)函數(shù)來寫把一個(gè)字符串寫入到文件中。嘗試下面的實(shí)例:

注意:請(qǐng)確保您有可用的tmp目錄,如果不存在該目錄,則需要在您的計(jì)算機(jī)上先創(chuàng)建該目錄。

/tmp一般是 Linux 系統(tǒng)上的臨時(shí)目錄,如果你在 Windows 系統(tǒng)上運(yùn)行,則需要修改為本地環(huán)境中已存在的目錄,例如:C:\tmp、D:\tmp等。

當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)在 /tmp 目錄中創(chuàng)建一個(gè)新的文件test.txt,并使用兩個(gè)不同的函數(shù)寫入兩行。接下來讓我們來讀取這個(gè)文件。

讀取文件

下面是從文件讀取單個(gè)字符的最簡(jiǎn)單的函數(shù):

int fgetc( FILE * fp );

fgetc()函數(shù)從 fp 所指向的輸入文件中讀取一個(gè)字符。返回值是讀取的字符,如果發(fā)生錯(cuò)誤則返回EOF。下面的函數(shù)允許您從流中讀取一個(gè)字符串:

char*fgets(char*buf,int n, FILE *fp );

函數(shù)fgets()從 fp 所指向的輸入流中讀取 n - 1 個(gè)字符。它會(huì)把讀取的字符串復(fù)制到緩沖區(qū)buf,并在最后追加一個(gè)null字符來終止字符串。

如果這個(gè)函數(shù)在讀取最后一個(gè)字符之前就遇到一個(gè)換行符 '\n' 或文件的末尾 EOF,則只會(huì)返回讀取到的字符,包括換行符。您也可以使用int fscanf(FILE *fp, const char *format, ...)函數(shù)來從文件中讀取字符串,但是在遇到第一個(gè)空格字符時(shí),它會(huì)停止讀取。

當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)讀取上一部分創(chuàng)建的文件,產(chǎn)生下列結(jié)果:

1:This2:is testing for fprintf...3:Thisis testing for fputs...

首先,fscanf()方法只讀取了This,因?yàn)樗诤筮呌龅搅艘粋€(gè)空格。其次,調(diào)用fgets()讀取剩余的部分,直到行尾。最后,調(diào)用fgets()完整地讀取第二行。

二進(jìn)制 I/O 函數(shù)

下面兩個(gè)函數(shù)用于二進(jìn)制輸入和輸出:

size_tfread(void *ptr, size_tsize_of_elements, size_tnumber_of_elements, FILE *a_file); size_tfwrite(constvoid *ptr, size_tsize_of_elements, size_tnumber_of_elements, FILE *a_file);

這兩個(gè)函數(shù)都是用于存儲(chǔ)塊的讀寫 - 通常是數(shù)組或結(jié)構(gòu)體。

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

    關(guān)注

    2

    文章

    761

    瀏覽量

    41476
  • C語言
    +關(guān)注

    關(guān)注

    180

    文章

    7575

    瀏覽量

    134090
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4237

    瀏覽量

    61969

原文標(biāo)題:C語言中的文件讀寫

文章出處:【微信號(hào):c-stm32,微信公眾號(hào):STM32嵌入式開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    如何在Go中操作文本文件

    作為一種編程語言,Go 具有廣泛的內(nèi)置功能,包括創(chuàng)建、讀取和寫入文本(.txt)文件文件的功能。 文件是現(xiàn)代世界我們?nèi)粘I畹闹匾M成部分
    發(fā)表于 09-29 09:48 ?707次閱讀

    使用文本文件(.txt)進(jìn)行數(shù)據(jù)存取的技巧總結(jié)

    二進(jìn)制還是文本文件取決于fopen的方式,如果用wt,則存儲(chǔ)為文本文件,這樣用記事本打開就可以正常顯示了;如果用w則存儲(chǔ)為二進(jìn)制
    發(fā)表于 02-21 10:56

    如何在Nios II中燒寫二進(jìn)制文件到flash中

    中我們可以將flash中的數(shù)據(jù)讀出來,那怎樣才能燒寫有用的數(shù)據(jù)呢。下面就八一八。首先要理清楚二進(jìn)制文件文本文件的區(qū)別。   大家都知道計(jì)算機(jī)的存儲(chǔ)在物理上是二進(jìn)制的,所以
    發(fā)表于 03-08 15:33

    labview 當(dāng)打開文本文件時(shí)點(diǎn)擊文件確定時(shí)為什么會(huì)關(guān)閉VI

    labview 當(dāng)打開文本文件時(shí)點(diǎn)擊文件確定時(shí)為什么會(huì)關(guān)閉VI
    發(fā)表于 09-16 16:53

    求助~二進(jìn)制文件的讀取問題

    `各位大神,我有個(gè)后綴為bin的二進(jìn)制文本文件,數(shù)據(jù)類型是16位帶符號(hào)的,我想把數(shù)據(jù)文件用labview波形文件打開,共16通道,
    發(fā)表于 10-17 23:44

    串口發(fā)送代碼,請(qǐng)問是通過串口調(diào)試工具直接發(fā)送.bin文件嗎?還是發(fā)送文本文件?。?/a>

    工具直接發(fā)送.bin文件嗎?還是把二進(jìn)制文件打開,把里面的內(nèi)容拷貝到文本文件.txt里,然后發(fā)送文本文件
    發(fā)表于 06-11 07:21

    【LabVIEW懶人系列教程-小白入門】1.25LabVIEW文件IO之二進(jìn)制dat文件讀寫

    碼:c133今日總結(jié)① txt文本文件的讀寫方式②電子表格文件的讀寫方式今日作業(yè)編輯創(chuàng)建文件路徑文件
    發(fā)表于 08-10 15:22

    C語言入門教程-文本文件

    文本文件 C中的文本文件很簡(jiǎn)單,不難掌握。所有的文本文件操作函數(shù)和相關(guān)類型都由stdio庫提供。 當(dāng)您的C
    發(fā)表于 07-29 11:23 ?1273次閱讀

    C語言入門教程-打開文本文件

    打開文本文件 使用fopen可以打開一個(gè)文件。fopen以某種指定模式(最常用的三種模式為r、w和a,分別代表讀、寫和附加)打開
    發(fā)表于 07-29 11:26 ?1866次閱讀

    C語言入門教程-二進(jìn)制文件

    二進(jìn)制文件 二進(jìn)制文件非常類似于結(jié)構(gòu)體數(shù)組,只不過這些結(jié)構(gòu)體被保存在一個(gè)磁盤文件而非內(nèi)存數(shù)組中。因?yàn)槭鞘褂么疟P保存
    發(fā)表于 07-29 14:24 ?1913次閱讀

    二進(jìn)制加法程序C語言版】

    二進(jìn)制加法程序C語言版】二進(jìn)制加法程序C語言版】二進(jìn)制
    發(fā)表于 12-29 11:03 ?0次下載

    C語言程序內(nèi)存布局該關(guān)注哪些內(nèi)容

    C語言代碼(文本文件)形成可執(zhí)行程序二進(jìn)制文件),需要經(jīng)過編譯-匯編-連接三個(gè)階段。編譯過程把C
    發(fā)表于 05-07 08:03 ?879次閱讀
    <b class='flag-5'>C</b>語言<b class='flag-5'>程序</b>內(nèi)存布局該關(guān)注哪些內(nèi)容

    在Linux上分析二進(jìn)制文件的10種方法

    這將是你進(jìn)行二進(jìn)制分析的起點(diǎn)。我們每天都在與文件打交道,并非所有的文件都是可執(zhí)行類型,除此之外還有各種各樣的文件類型。在你開始之前,你需要了解要分析的
    的頭像 發(fā)表于 06-18 17:32 ?3039次閱讀

    Python-文件操作

    在計(jì)算機(jī)中,文件是以 **二進(jìn)制** 的方式保存在磁盤上的* **文本文件 **和** 二進(jìn)制文件**
    的頭像 發(fā)表于 02-16 15:42 ?643次閱讀
    Python-<b class='flag-5'>文件</b>操作

    python創(chuàng)建文件對(duì)象

    (經(jīng)常會(huì)用!!!) 文本文件對(duì)象和二進(jìn)制文件對(duì)象的創(chuàng)建 如果是二進(jìn)制模式 b ,則創(chuàng)建的是
    的頭像 發(fā)表于 06-21 17:19 ?1395次閱讀
    python<b class='flag-5'>創(chuàng)建文件</b>對(duì)象