fopen

fopen

函式原型:FILE * fopen(const char * path, const char * mode); 相關函式:open, fclose, fopen_s, _wfopen 返回值:檔案順利打開後,指向該流的檔案指針就會被返回。如果檔案打開失敗則返回 NULL,並把錯誤代碼存在 error 中。

C語言

函式簡介

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

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

一般而言,打開檔案後會做一些檔案讀取或寫入的動作,若打開檔案失敗,接下來的讀寫動作也無法順利進行,所以一般在 fopen() 後作錯誤判斷及處理。

參數說明:

參數 path字元串包含欲打開的檔案路徑及檔案名稱,參數 mode 字元串則代表著流形態。

mode 有下列幾種形態字元串:

字元串說明
r以唯讀方式打開檔案,該檔案必須存在。
r+以讀/寫方式打開檔案,該檔案必須存在。
rb+以讀/寫方式打開一個二進制檔案,只允許讀/寫數據。
rt+以讀/寫方式打開一個文本檔案,允許讀和寫。
w打開只寫檔案,若檔案存在則檔案長度清為零,即該檔案內容會消失;若檔案不存在則創建該檔案。
w+打開可讀/寫檔案,若檔案存在則檔案長度清為零,即該檔案內容會消失;若檔案不存在則創建該檔案。
a以附加的方式打開只寫檔案。若檔案不存在,則會創建該檔案;如果檔案存在,則寫入的數據會被加到檔案尾後,即檔案原先的內容會被保留(EOF 符保留)。
a+以附加方式打開可讀/寫的檔案。若檔案不存在,則會創建該檔案,如果檔案存在,則寫入的數據會被加到檔案尾後,即檔案原先的內容會被保留(EOF符不保留)。
wb以只寫方式打開或新建一個二進制檔案,只允許寫數據。
wb+以讀/寫方式打開或新建一個二進制檔案,允許讀和寫。
wt+以讀/寫方式打開或新建一個文本檔案,允許讀和寫。
at+以讀/寫方式打開一個文本檔案,允許讀或在文本末追加數據。
ab+以讀/寫方式打開一個二進制檔案,允許讀或在檔案末追加數據。

以 x 結尾的模式為獨占模式,檔案已存在或者無法創建(一般是路徑不正確)都會導致 fopen 失敗。檔案以作業系統支持的獨占模式打開。

上述的形態字元串都可以再加一個 b 字元,如 rb、w+b 或 ab+ 等組合,加入 b 字元用來告訴函式館以二進制模式打開檔案。如果不加 b,表示默認加了 t,即 rt、wt,其中 t 表示以文本模式打開檔案。由 fopen() 所建立的新檔案會具有 S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH(0666) 許可權,此檔案許可權也會參考umask值。

有些 C編譯系統可能不完全提供所有這些功能,有的C版本不用"r+"、"w+"、"a+",而用"rw"、"wr"、"ar"等,讀者注意所用系統的規定。

二進制 和文本模式的區別

1、在Windows系統中,文本模式下,檔案以"\r\n"代表換行。若以文本模式打開檔案,並用 fputs 等函式寫入換行符"\n"時,函式會自動在"\n"前面加上"\r"。即實際寫入檔案的是"\r\n"。

2、在類 Unix/Linux 系統中文本模式下,檔案以"\n"代表換行。所以 Linux 系統中在文本模式和二進制模式下並無區別。

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

1、打開是否為二進制檔案,用“b”標識。

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

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

fopen fopen

程式示例

示例一

示例二

注意!初學者往往會犯一個錯誤,即在輸入檔案名稱時不加後綴名,請注意加上!

示例三

示例四

Linux 下的程式示例。

在 / opt / C_lanuage / fopen_fread 新建兩個文本,main.c 和 tmp.txt

tmp.txt:

I Love You Linux----Red Hat Enterprise----夢劇場的記憶

main.c 程式:

編譯加執行

[root@localhost fopen_fread]# gcc - g main.c - o main

[root@localhost fopen_fread]# . / main

I Love You Linux----Red Hat Enterprise----夢劇場的記憶

注意

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

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

2、在檔案操作完成後,需要將檔案關閉,一定要注意,否則會造成檔案所占用記憶體泄漏和在下次訪問檔案時出現問題。

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

在PHP中

說明

resource fopen ( string filename, string mode, [ bool use_include_path, [resource zcontext]] )

fopen() 將 filename 指定的名字資源綁定到一個流上。如果 filename 是 "scheme://..." 的格式,則被當成一個 URL,PHP 將搜尋協定處理器(也被稱為封裝協定)來處理此模式。如果該協定尚未註冊封裝協定,PHP 將發出一條訊息來幫助檢查腳本中潛在的問題並將 filename 當成一個普通的檔案名稱繼續執行下去。

如果 PHP 認為 filename 指定的是一個本地檔案,將嘗試在該檔案上打開一個流。該檔案必須是 PHP 可以訪問的,因此需要確認檔案訪問許可權允許該訪問。如果激活了 安全模式 或者 open_basedir 則會套用進一步的限制。

例子

MATLAB函式

在matlab中,fopen也是一個打開檔案的函式。在matlab的命令視窗中輸入doc fopen或者help fopen就可以獲得該函式的幫助信息。

調用格式

fileID = fopen( filename)

fileID = fopen( filename, permission)

fileID = fopen( filename, permission, machineformat)

fileID = fopen( filename, permission, machineformat, encoding)

[ fileID, message]= fopen( filename, ...)

fIDs = fopen('all')

[ filename, permission, machineformat, encoding]= fopen( fileID)

各種調用格式詳情請參閱MATLAB幫助文檔。

程式示例

程式首先向檔案寫入字元串,然後通過type列印在螢幕上。

這裡需要注意的是,如果字元串內有單撇號(')要用兩個單撇號表示一個單撇號。

在Oracle中

Oracle提供的檔案操作包UTL_FILE包中的UTL_FILE.FOPEN負責打開一個檔案。

UTL_FILE.FOPEN(location in varchar2, filename in varchar2, open_mode in varchar2) return FILE_TYPE;

Location 是路徑參數,

FILENAME 是檔案名稱,

OPEN_MODE是打開模式,'R'是讀文本,'W'是寫文本,'A'是附加文本,參數不分大小寫,如果指定'A'但是檔案不存在,它會用'W'先創建出來,'W'有覆蓋的功能;

其中的location並不能簡單的指定為'D:\temp'等路徑,要建立一個DIRECTORY變數並付給許可權(必須以DBA身份登錄):

create or replace directory D_OUTPUT as 'D:\TEMP';

grant read,write on directory D_OUTPUT to testdb;

GRANT EXECUTE ON utl_file TO testdb;

之後就可以用UTL_FILE包建立檔案了 :

V_FILE UTL_FILE.FILE_TYPE;

V_FILE := UTL_FILE.FOPEN('D_OUTPUT', 'Data.txt', 'w');

相關詞條

相關搜尋

熱門詞條

聯絡我們