當前位置:
首頁 > 知識 > 標準IO:文件的打開與關閉函數 fopen() & fclose

標準IO:文件的打開與關閉函數 fopen() & fclose

(1) 流(stream)和文件(file)

流和文件 在Turbo C2.0中是有區別的, Turbo C2.0 為編程者和被訪問的設備之間提供了一層抽象的東西, 稱之為"流

", 而將具體的實際設備叫做文件。流是一個邏輯設備, 具有相同的行為。因此, 用來進行磁碟文件寫的函數也同樣可以用

來進行印表機的寫入。在Turbo C2.0中有兩種性質的流: 文字流( text stream)和二進位(binary stream)。對磁碟來說

就是文本文件和二進位文件。本軟體為了便於讓讀者易理解Turbo C2.0語言而沒有對流和文件作特別區分。

(2) 文件指針FILE

實際上FILE是一個新的數據類型。它是Turbo C2.0的基本數據類型的集合, 稱之為結構指針。有關結構的概念將在第>四節中詳細介紹, 這裡只要將FILE理解為一個包括了文件管理有關信息的數據結構, 即在打開文件時必須先定義一個文件>指針。

(3) 以後介紹的函數調用格式將直接寫出形式參數的數據類型和函數返回值的數據類型。例如: 上面打開文件的函數, 返回一個文件指針, 其中形式參數有兩個, 均為字元型變數(字元串數組或字元串指針)。本軟體不再對函數的調用格式作

詳細說明。

fopen;

功能:打開文件

頭文件:#include

函數原型:FILE *fopen(const char *path, const char *mode);

參數說明:第一個形式參數表示文件名, 可以包含路徑和文件名兩部分.如:

"B:TEST.DAT"

"C://TC//TEST.DAT"

如果將路徑寫成"C:/TC/TEST.DAT"是不正確的, 這一點要特別注意。

第二個形式參數表示打開文件的類型。關於文件類型的規定參見下表。

表 文件操作類型

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

字元 含義

───────────────────────────────────────────────────

"r" 以只讀方式打開文件,該文件必須存在。

"r+" 以讀/寫方式打開文件,該文件必須存在。

"rb+" 以讀/寫方式打開一個二進位文件,只允許讀/寫數據。

"rt+" 以讀/寫方式打開一個文本文件,允許讀和寫。

"w" 打開只寫文件,若文件存在則長度清為 0,即該文件內容消失,若不存在則創建該文件。

"w+" 打開可讀/寫文件,若文件存在則文件長度清為零,即該文件內容會消失。若文件不存在則建立該文件。

"a" 以附加的方式打開只寫文件。若文件不存在,則會建立該文件,如果文件存在,寫入的數據會被加到文件尾>,即文件原先的內容會被保留(EOF 符保留)。

"a+" 以附加方式打開可讀/寫的文件。若文件不存在,則會建立該文件,如果文件存在,則寫入的數據會被加到文

件尾後,即文件原先的內容會被保留(原來的 EOF 符不保留)。

"wb" 以只寫方式打開或新建一個二進位文件,只允許寫數據。

"wb+" 以讀/寫方式打開或建立一個二進位文件,允許讀和寫。

"wt+" 以讀/寫方式打開或建立一個文本文件,允許讀寫。

"at+" 以讀/寫方式打開一個文本文件,允許讀或在文本末追加數據。

"ab+" 以讀/寫方式打開一個二進位文件,允許讀或在文件末追加數據。"

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

返回值:文件順利打開後,指向該流的文件指針就會被返回.如果文件打開失敗則返回 NULL,並把錯誤代碼存在 errno 中

打開方式總結:各種打開方式主要有三個方面的區別

1、打開是否為二進位文件,用「b」標識。

2、讀寫的方式,有以下幾種:只讀、只寫、讀寫、追加只寫、追加讀寫這幾種方式。

3、對文件是否必 須存在、以及存在時是清空還是追加會有不同的響應。具體判斷如下圖。

╭ 是 ╭ 清空

文件是否必須存在 ┤ ╭ 存在 ┤

╰ 否 ┤ ╰ 追加

╰ 不存在 ─ 新建

fclose;

功能:關閉fopen打開的文件

頭文件:#include

函數原型:int fclose(FILE *stream);

返回值:如果流成功關閉,fclose 返回 0,否則返回EOF(-1).(如果流為NULL,而且程序可以繼續執行,fclose設定error number給EINVAL,並返回EOF.)

注意

在文件操作時,需要注意以下幾點問題:

1、在定義文件指針時,要將文件指針指向空;如 FILE *fp = NULL;

2、文件操作完成後,需要將文件關閉,一定要注意,否則會造成文件所佔用內存泄露和在下次訪問文件時出現問題。

3、文件關閉後,需要將文件指針指向空,這樣做會防止出現游離指針,而對整個工程造成不必要的麻煩;如:fp = NULL;

perror;

功能:用來將上一個函數發生錯誤的原因輸出到標準設備(stderr)。

頭文件:#include

函數原型:void perror(const char *s);

例:

1 #include
2 #include
3 int main
4 {
5 FILE *fp = NULL;
6 fp = fopen("tmp","r+");
7 if(fp == NULL)
8 {
9 perror("tmp");
10 exit(1);
11 }
12 puts("OK!");
13 fclose(fp);
14 fp = NULL;
15 return 0;
16 }
17 運行結果:
18 [root@Yelong io]# gcc fopen.c
19 [root@Yelong io]# ./a.out
20 /home/tmp: No such file or directory

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 科技優家 的精彩文章:

python+selenium自動化測試環境安裝
開啟Sqlserver遠程訪問
Angular表單控制項需要類型和實際值類型不一致時實現雙向綁定
Python爬蟲從入門到放棄(十二)之 Scrapy框架的架構和原理

TAG:科技優家 |

您可能感興趣

打開和寫入文件(fopen和fopen s)
Avante Technology發布Emendo Cloud 3D列印文件自動分析和維修服務
理解 Linux 中的 /etc/services 文件
Spring Boot 配置文件 yml與properties
Linux系統安裝Oracle,配置etc/security/limits.conf文件
tempfile.NamedTemporaryFile創建臨時文件在windows沒有許可權打開
Python使用pandas讀取Excel文件多個WorkSheet的數據並繪製柱狀圖和熱力圖
Microsoft拖放文件支持更新Office,OneDrive iOS應用程序
linux ssh、sftp、scp命令遠程傳輸文件
用fread和fwrite讀寫文件
使用python將excel轉為lua文件
Project Parfait將Photoshop文件轉換為代碼
不打開文件獲取名稱。Excel VBA Application對象GetOpenFilename方法教程
乾貨:詳解 Tomcat 配置文件 server.xml
使用 YAML 文件創建 Kubernetes Deployment
Telegrab惡意軟體可以獲取Telegram的密碼、Cookie及密鑰文件
linux-RHEL/Centos都選擇了xfs文件系統
Vdex Extractor:從Vdex文件反編譯和提取Android Dex位元組碼
linux中用locate查找文件
CodeWarrior IDE使用Tips-使用burner將elf文件轉換生成HEX和BIN文件的方法和步驟詳解