C語言文件操作

2021-01-09 騰訊網

C 語言把文件看作是一個字符(字節)的序列,即由一個一個字符(字節)的數據順序組成。根據數據的組織形式,可分為 ASCⅡ 文件和二進位文件。文件的操作包括:文件的打開、文件的關閉、文件的讀寫操作、文件狀態檢查以及文件的定位等。

1 文件的打開

1.1 函數原型

1.2 功能說明

按照 mode 規定的方式,打開由 pname指定的文件。若找不到由 pname 指定的相應文件,就按以下方式之一處理:

此時如 mode 規定按寫方式打開文件,就按由pname 指定的名字建立一個新文件;

此時如 mode 規定按讀方式打開文件,就會產生一個錯誤;

打開文件的作用:

分配給打開文件一個FILE 類型的文件結構體變量,並將有關信息填入文件結構體變量;

開闢一個緩衝區;

調用作業系統提供的打開文件或建立新文件功能,打開或建立指定文件;

:指出 fopen 是一個返回文件類型的指針函數;

1.3 參數說明

pname:是一個字符指針,它將指向要打開或建立的文件的文件名字符串。mode:是一個指向文件處理方式字符串的字符指針。

1.4 返回值

正常返回:被打開文件的文件指針。

異常返回:NULL,表示打開操作不成功。

要說明的是:C 語言將計算機的輸入輸出設備都看作是文件。例如,鍵盤文件、屏幕文件等。ANSI C 標準規定,在執行程序時系統先自動打開鍵盤、屏幕、錯誤三個文件。這三個文件的文件指針分別是:標準輸入 stdin、標準輸出 stdout 和標準出錯 stderr。

2 文件的關閉

2.1 函數原型

2.2 功能說明

關閉由 fp 指出的文件。此時調用作業系統提供的文件關閉功能,關閉由 fp->fd 指出的文件;釋放由 fp 指出的文件類型結構體變量;返回操作結果,即 0 或 EOF。

2.3 參數說明

fp:一個已打開文件的文件指針。

2.4 返回值

正常返回:0。

異常返回:EOF,表示文件在關閉時發生錯誤。

3 文件的讀寫操作

3.1 從文件中讀取一個字符3.1.1 函數原型

3.1.2 功能說明

從fp所指文件中讀取一個字符。

3.1.3 參數說明

fp:這是個文件指針,它指出要從中讀取字符的文件。

3.1.4返回值

正常返回: 返回讀取字符的代碼。

非正常返回:返回 EOF。例如,要從"寫打開"文件中讀取一個字符時,會發生錯誤而返回一個 EOF。

顯示指定文件的內容:

3.2 寫一個字符到文件中去

3.2.1 函數原型

3.2.2 功能說明

把 ch中的字符寫入由 fp 指出的文件中去。

3.2.3 參數說明

ch:是一個整型變量,內存要寫到文件中的字符(C 語言中整型量和字符量可以通用)。fp:這是個文件指針,指出要在其中寫入字符的文件。

3.2.4 返回值

正常返回: 要寫入字符的代碼。

非正常返回:返回 EOF。例如,要往"讀打開"文件中寫一個字符時,會發生錯誤而返回一個EOF。

將一個文件的內容複製到另一個文件中去:

按十進位和字符顯示文件代碼,若遇不可示字符就用井號"#"字符代替之。

3.3 從文件中讀取一個字符串

3.3.1 函數原型

3.3.2 功能說明

從由 fp 指出的文件中讀取 n-1 個字符,並把它們存放到由 str 指出的字符數組中去,最後加上一個字符串結束符 '\0'。

3.3.3 參數說明

str:接收字符串的內存地址,可以是數組名,也可以是指針。

n: 指出要讀取字符的個數。

fp:這是個文件指針,指出要從中讀取字符的文件。

3.3.4 返回值

正常返回:返回字符串的內存首地址,即 str 的值。

非正常返回:返回一個 NULL 值,此時應當用 feof() 或 ferror() 函數來判別是讀取到了文件尾,還是發生了錯誤。例如,要從"寫打開"文件中讀取字符串,將發生錯誤而返回一個 NULL 值。

3.4 寫一個字符串到文件中去

3.4.1函數原型

3.4.2 功能說明

把由 str 指出的字符串寫入到 fp 所指的文件中去。

3.4.3 參數說明

str:指出要寫到文件中去的字符串。fp:這是個文件指針,指出字符串要寫入其中的文件。

3.4.4 返回值

正常返回: 寫入文件的字符個數,即字符串的長度。

非正常返回:返回一個 NULL 值,此時應當用 feof() 或 ferror( )函數來判別是讀取到了文件尾,還是發生了錯誤。例如,要往一個"讀打開" 文件中寫字符串時,會發生錯誤而返回一個NULL值。

將一個文件的內容附加到另一個文件中去。

3.5 往文件中寫格式化數據

3.5.1 函數原型

3.5.2 功能說明

將變量表列(arg_list)中的數據,按照 format 指出的格式,寫入由 fp 指定的文件。fprintf() 函數與 printf() 函數的功能相同,只是 printf() 函數是將數據寫入屏幕文件(stdout)。

3.5.3 參數說明

fp:這是個文件指針,指出要將數據寫入的文件。

format:這是個指向字符串的字符指針,字符串中含有要寫出數據的格式,所以該字符串成為格式串。格式串描述的規則與 printf() 函數中的格式串相同。

arg_list:是要寫入文件的變量表列,各變量之間用逗號分隔。

3.6 以二進位形式讀取文件中的數據

3.6.1 函數原型

3.6.2 功能說明

從由 fp 指定的文件中,按二進位形式將 個數據讀到由 buffer 指出的數據區中。

3.6.3 參數說明

buffer:這是一個 void 型指針,指出要將讀入數據存放在其中的存儲區首地址。sife:指出一個數據塊的字節數,即一個數據塊的大小尺寸。

count:指出一次讀入多少個數據塊(sife)。

fp:這是個文件指針,指出要從其中讀出數據的文件。

3.6.4 返回值

正常返回:實際讀取數據塊的個數,即 count。

異常返回:如果文件中剩下的數據塊個數少於參數中 count 指出的個數,或者發生了錯誤,返回 0 值。此時可以用feof() 和 ferror() 來判定到底出現了什麼情況。

3.7 以二進位形式寫數據到文件中去

3.7.1 函數原型

3.7.2 功能說明

按二進位形式,將由 buffer 指定的數據緩衝區內的 個數據寫入由 fp 指定的文件中去。

3.7.3 參數說明

buffer:這是一個 void型指針,指出要將其中數據輸出到文件的緩衝區首地址。

sife:指出一個數據塊的字節數,即一個數據塊的大小尺寸。

count:一次輸出多少個數據塊(sife)。

fp:這是個文件指針,指出要從其中讀出數據的文件。

3.7.4 返回值

正常返回:實際輸出數據塊的個數,即 count。

異常返回:返回0值,表示輸出結束或發生了錯誤。

3.8 以二進位形式讀取一個整數

3.8.1 函數原型

3.8.2 功能說明

從由 fp 指定的文件中,以二進位形式讀取一個整數。

3.8.3 參數說明

fp:是文件指針。

3.8.4 返回值

正常返回:所讀取整數的值。

異常返回:返回 EOF,即 -1。由於讀取的整數值有可能是 -1,所以必須用 feof() 或 ferror() 來判斷是到了文件結束,還是出現了一個出錯。

3.9 以二進位形式存貯一個整數

3.9.1 函數原型

3.9.2 功能說明

以二進位形式把由變量 n 指出的整數值存放到由 fp 指定的文件中。

3.9.3 參數說明

n:要存入文件的整數。

fp:是文件指針。

3.9.4 返回值

正常返回:所輸出的整數值。

異常返回:返回 EOF,即 -1。由於輸出的整數值有可能是 -1,所以必須用 feof() 或 ferror() 來判斷是到了文件結束,還是出現了一個出錯。

4 文件狀態檢查

4.1 文件結束4.1.1 函數原型

4.1.2 功能說明

該函數用來判斷文件是否結束。

4.1.3 參數說明

fp:文件指針。

4.1.4 返回值

0:假值,表示文件未結束。

1:真值,表示文件結束。

4.2 文件讀/寫出錯

4.2.1 函數原型

4.2.2 功能說明

檢查由 fp 指定的文件在讀寫時是否出錯。

4.2.3 參數說明

fp:文件指針。

4.2.4 返回值

0:假值,表示無錯誤。

1:真值,表示出錯。

4.3 清除文件錯誤標誌

4.3.1 函數原型

4.3.2 功能說明

清除由 fp 指定文件的錯誤標誌。

4.3.3 參數說明

fp:文件指針。

4.3.4 返回值

無。

4.4 了解文件指針的當前位置

4.4.1 函數原型

4.4.2 功能說明

取得由 fp 指定文件的當前讀/寫位置,該位置值用相對於文件開頭的位移量來表示。

4.4.3參數說明

fp:文件指針。

4.4.4 返回值

正常返回:位移量(這是個長整數)。

異常返回:-1,表示出錯。

5 文件定位

5.1 反繞5.1.1 函數原型

5.1.2 功能說明

使由文件指針 fp 指定的文件的位置指針重新指向文件的開頭位置。

5.1.3 參數說明

fp:文件指針。

5.1.4返回值

無。

5.2 隨機定位

5.2.1 函數原型

5.2.2 功能說明

使文件指針 fp 移到基於 base 的相對位置 offset 處。

5.2.3 參數說明

fp:文件指針。

offset:相對 base 的字節位移量。這是個長整數,用以支持大於 64KB 的文件。

base:文件位置指針移動的基準位置,是計算文件位置指針位移的基點。ANSI C 定義了 base 的可能取值,以及這些取值的符號常量。

5.2.4 返回值

正常返回:當前指針位置。

異常返回:-1,表示定位操作出錯。

5.3 關於exit()函數

5.3.1 函數原型

5.3.2 功能說明

exit() 函數使程序立即終止執行,同時將緩衝區中剩餘的數據輸出並關閉所有已經打開的文件。

5.3.3 參數說明

status:為 0 值表示程序正常終止,為非 0 值表示一個定義錯誤。

5.3.4 返回值

無。

5.4 關於feof()函數

5.4.1 函數原型

5.4.2 功能說明

在文本文件(ASCII 文件)中可以用值為 -1 的符號常量 EOF 來作為文件的結束符。但是在二進位文件中 -1 往往可能是一個有意義的數據,因此不能用它 來作為文件的結束標誌。為了能有效判別文件是否結束,ANSI C 提供了標準函數 feof(),用來識別文件是否結束。

5.4.3 參數說明

fp:文件指針。

5.4.4 返回值

返回為非 0 值:已到文件尾。

返回為 0 值:表示還未到文件尾。

相關焦點

  • 乾貨|C語言文件的基本操作!
    本文轉載自【微信公眾號:手機電腦雙黑客,ID:heikestudio】經微信公眾號授權轉載,如需轉載與原文作者聯繫c語言對文件的操作主要分為:按字符操作,按行操作,按內存塊操作主要的函數:fopen():FILE * fopen(_In_z_ const char * _Filename, _In_z_ const char
  • C語言之文件操作
    在 Linux 和 Unix 作業系統下,文件的定義就寬泛多了。不光軟體,硬體也可以叫文件。也就是說,硬體實際上也是當做文件的方式來處理的。在C語言中,文件一般分為兩種,一種是二進位文件,就是我們編譯出來的那個東西,我們是看不懂的;另一種是文本文件,也就是我們常說的原始碼。
  • c語言文件操作整理
    推薦《c陷阱與缺陷》FILE *fp;fp = fopen(file, "r+");編程者也許認為,程序一旦執行上述操作完畢,就可以自由地進行讀取和寫入的操作了。遺憾的是,事實總難遂人所願,為了保持與過去不能同時進行讀寫操作的程序的向下兼容性,一個輸入操作不能隨後直接緊跟輸出操作,反之亦然。
  • C開發實戰-文件操作
    /表示,Visual Studio2019 本地Windows調試器運行時源文件file_open_close.c的當前目錄是D:\workspace\c\ittimelinedotnet\vs2019\c-core\c-core-advanced,打開方式可以是如下幾種方式r或rb 以只讀方式打開一個文本文件(不創建文件,若文件不存在則報錯)w或wb 以寫方式打開文件
  • C語言文本文件操作
    >1、打開成功,返回有效地址2、打開失敗,返回NULL3、「w」,如果文件不存在,新建一個123.txt,如果存在,清除裡面的內容4、「r」,如果文件不存在,打開失敗5、「a」,如果文件不存在,新建,如果存在,光標移動到最後面二、讀寫文件1、按字符讀寫fgetc()、fputc
  • C語言 技能提升 系列文章(九)文件定位
    文件,顧名思義,就是存在某個文件夾下的文件。對應於物理設備的話,可能是HDD/SSD/Flash等等。但是為了能讓我們來讀寫他的內容,作業系統會將文件內容讀取到內存中,然後我們就可以像操作其他內存數據一樣操作文件了。但是,由於文件的特殊性,我們不能像操作數組一樣,操作文件緩存。不過,C語言本身卻給我們提供了方便的庫函數API,基本上和操作數組一類的緩存,一樣方便了。
  • C語言項目中.h和.c文件的關係和概念
    在編譯器只認識.c(.cpp))文件,而不知道.h是何物的年代,那時的人們寫了很多的.c(.cpp)文件,漸漸地,人們發現在很多.c(.cpp)文件中的聲明語句就是相同的。
  • C/C++學習日記:C語言編譯器gcc命令如何操作步驟
    前言:C語言的應用範圍廣泛,具備很強的數據處理能力,不僅僅是在軟體開發上,而且各類科研都需要用到C語言,適於編寫系統軟體,三維在 UNIX 系統中,C 語言編譯器稱為 cc。實際上,gcc 能夠編譯三種語言:C、C++ 和 Object C(C 語言的一種面向對象擴展)。利用 gcc 命令可同時編譯並連接 C 和 C++ 源程序,一般來說,C 編譯器通過源文件的後綴名來判斷是 C 程序還是 C++ 程序。
  • C語言頭文件被include後都發生了什麼?為何不能在頭文件定義變量
    本文將較為詳細的討論C語言頭文件的特點,並在此基礎上,分析幾個初學者常會跳進的「陷阱」,以及相應的解決辦法。C語言的#include語法頭文件通常與C語言的#include 語法配合使用,意為「將頭文件內容包含進來」,例如在 t.c 文件裡寫下這段C語言代碼:
  • 製作和使用自定義C語言庫文件
    庫文件的生成  為敘述方便,請在C盤根目錄中新建一目錄,並將其命名為libtest。以下將C:\libtest簡稱為工作目錄。  在ICCAVRIDE環境中新建兩個文件,分別命名為 GetMax.c 和 GetMax.h,並保存至工作目錄中。
  • C語言頭文件路徑剖析
    在一個軟體項目中,如果需要在一個文件中包含另一個頭文件時,一般有兩種包含方式:include 「module.h」如果你引用的頭文件是標準庫的頭文件或官方路徑下的頭文件,一般使用尖括號 <> 包含;如果你使用的頭文件是自定義的或項目中的頭文件,一般使用雙引號 &34; 包含。
  • 現代程式語言起點,C語言之環境搭建
    但也就是因為它有指針,可以直接進行靠近硬體的操作,所以帶來很多不安全的因素二、C語言的環境搭建1、作業系統說明:推薦使用Unix系統,比如類Unix系統的Linux系統中的CentOs、Ubantu系統,或者使用Mac。
  • 跟光磊學C語言-C語言概述與開發環境搭建
    c-core新建源文件 helloworld.cC語言的源文件必須是以.c為擴展名,新建文件默認是文本文件,即.txt結尾的擴展名。(hellworld.c)終端定位源文件的快捷方式:在文件資源管理的源文件路徑(D:\workspace\c\core)輸入cmd就會自動彈出終端,終端當前所處的路徑就在源文件對應的目錄。
  • PIC單片機C語言程序設計(8)
    如此按提示操作下去,即可順利完成PICC8.05 編譯器的安裝(動手操作時,除圖25 中修改磁碟路徑外,都只需用滑鼠點擊各文件的按鈕(命令),如用滑鼠點擊NEXT 等,操作很簡單。即可用MPLAB IDE7.40 對PIC 單片機建立彙編語言或C 語言的源程序、創建項目(project)、對源程序進行彙編(使用彙編語言時)或編譯(使用C 語言時),彙編或編譯通過後,會生成目標碼。hex 文件。有了目標碼。hex 文件,就可對PIC 單片機編程(燒寫)和對源程序進行模擬調試了。
  • C語言程序設計教程
    導讀:C語言是一門通用的計算機程式語言,應用非常得廣泛,在計算機、單片機以及工業上都有的莫大的貢獻,今天我們來學習如何進行C語言程序設計。
  • 第六篇:C語言中結構體與文件操作相關知識點梳理
    前面總結過,C語言中的基本數據類型有四種,分別是整型、浮點型和字符型;後面又講到可以保存字符串的字符數組。但這遠遠不夠實際應用的需要。在C語言中結構體是對數據類型的無限擴展。程式設計師可以根據需要定義各種各樣的數據類型,即:結構體。問題二:數據無法永久保存前面我們編寫運行的所有C語言程序,或多或少都會輸入一些數據。
  • 加速程序開發 Python整合C語言模塊
    Python是一種用於快速開發軟體的程式語言,它的語法比較簡單,易於掌握,但存在執行速度慢的問題,並且在處理某些問題時存在不足,如對計算機硬體系統的訪問,對媒體文件的訪問等。而作為軟體開發的傳統程式語言C語言,卻能在這些問題上很好地彌補Python語言的不足。
  • Go 語言的一個配置文件解析器
    Go 語言裡找一個配置文件解析器,無意間發現了 https://github.com/robfig/config 這個庫是 robfig 從 https://github.com/miguel-branco/goconfig 裡分支修改過來的。看了下時間,已有一年多沒動過了,估計庫已相當完善,夠用了。
  • C語言 技能提升 系列文章(六)文件操作
    C語言除了提供open()/ read()/ write()/ close() 這些基本的操作以外,還提供了下面幾個非常有用的API。// 刪除指定的文件int remove ( const char * filename ); // 重命名指定的文件int rename ( const char * oldname, const char * newname );// 以「wb+」模式打開一個臨時文件FILE * tmpfile ( void );// 生成臨時文件名字,生成的字符串會包含傳入的參數
  • C語言的歷史,個人談談c語言
    作為一門計算機語言,c語言是一門面向過程,非常抽象的一個程序設計語言,他是在底層開發,並不適用於高層開發,能夠直接以簡單的方式編譯存儲器。作為一門高級語言,不需要任何運行環境。20世紀80年代,美國國家標準局為了避免各國產生的差異,於是給c語言制定了一套完整的國際標準語言