參考:https://ww2.mathworks.cn/help/matlab/ref/fopen.html?searchHighlight=fopen&s_tid=doc_srchtitle
個人認為返回的標識符是一個文件句柄handle, 網上的解釋是: MATLAB® 保留文件標識符 0、1 和 2 分別用於標准輸入、標准輸出(屏幕)和標准錯誤。
fopen
說明
示例
fileID = fopen(filename) 打開文件 filename 以便以二進制讀取形式進行訪問,並返回等於或大於 3 的整數文件標識符。MATLAB® 保留文件標識符 0、1 和 2 分別用於標准輸入、標准輸出(屏幕)和標准錯誤。
如果 fopen 無法打開文件,則 fileID 為 -1。
示例
如果 fopen 打開文件失敗,則 [fileID,errmsg] = fopen(___) 還將返回一條因系統而異的錯誤消息。否則,errmsg 是一個空字符向量。您可以將此語法與前面語法中的任何輸入參數結合使用。
示例
fIDs = fopen('all') 返回包含所有打開文件的文件標識符的行向量。為標准輸入、輸出以及錯誤而保留的標識符不包括在內。向量中元素的數量等於打開文件的數量。
filename = fopen(fileID) 返回上一次調用 fopen 在打開 fileID 指定的文件時所使用的文件名。輸出文件名將解析到完整路徑。fopen 函數不會從文件讀取信息來確定輸出值。
示例
[filename,permission,machinefmt,encodingOut] = fopen(fileID) 還會返回上一次調用 fopen 在打開指定文件時所使用的權限、計算機格式以及編碼。如果是以二進制模式打開的文件,則 permission 會包含字母 'b'。encodingOut 輸出是一個標准編碼方案名稱。fopen 不會從文件讀取信息來確定這些輸出值。無效的 fileID 會為所有輸出參數返回空字符向量。
示例
全部折疊
打開文件並將標識符傳遞給文件 I/O 函數
打開文件並將文件標識符傳遞給 fgetl 函數以讀取數據。
打開文件 tsunamis.txt 並獲取文件標識符。
將 fileID 傳遞給 fgetl 函數以從文件讀取一行。
tline =
'A global tsunami data set in xlsx format, comprising the following file:'
關閉文件。
請求要打開的文件的名稱
創建一條提示,要求提供待打開文件的名稱。如果 fopen 無法打開文件,則顯示相關錯誤消息。
打開要寫入的文件並指定訪問類型、寫入順序、字符編碼
打開一個文件,使用 Shift-JIS 字符編碼寫入到文件。
'w' 輸入指定寫入權限,'n' 輸入指定本機字節排序方式,'Shift_JIS' 指定字符編碼方案。
獲取有關已打開文件的信息
假定您以前使用 fopen 打開了文件。
獲取所有已打開文件的文件標識符。
獲取已打開文件的文件名稱及字符編碼。使用 ~ 代替您希望省略的輸出參數。
filename =
'matlabroot\toolbox\matlab\demos\tsunamis.txt'
encoding =
'windows-1252'
這里顯示的輸出內容有代表性。您的結果可能有所不同。
輸入參數
全部折疊
filename - 要打開的文件的名稱
字符向量或字符串標量
要打開的文件名稱(含文件擴展名),指定為字符行向量或字符串標量。如果該文件不在當前文件夾中,則 filename 必須包含完整或相對路徑。
在 UNIX® 系統上,如果 filename 以 '~/' 或 '~username/' 開頭,則 fopen 函數分別延長路徑至當前用戶或指定用戶的主目錄。
示例: 'myFile.txt'
數據類型: char | string
permission - 文件訪問類型
'r' (默認) | 'w' | 'a' | 'r+' | 'w+' | 'a+' | 'A' | 'W' | ...
文件訪問類型,指定為字符向量或字符串標量。您可以用二進制模式或文本模式打開文件。在 UNIX 系統上,兩種轉換模式具有相同的效果。要以二進制模式打開文件,請指定以下各項之一。
| 'r' |
打開要讀取的文件。 |
| 'w' |
打開或創建要寫入的新文件。放棄現有內容(如果有)。 |
| 'a' |
打開或創建要寫入的新文件。追加數據到文件末尾。 |
| 'r+' |
打開要讀寫的文件。 |
| 'w+' |
打開或創建要讀寫的新文件。放棄現有內容(如果有)。 |
| 'a+' |
打開或創建要讀寫的新文件。追加數據到文件末尾。 |
| 'A' |
打開文件以追加(但不自動刷新)當前輸出緩沖區。 |
| 'W' |
打開文件以寫入(但不自動刷新)當前輸出緩沖區。 |
要以文本模式打開文件,請將字母 't' 附加到 permission 參數,例如 'rt' 或 'wt+'。
在 Windows® 系統上,以文本模式:
如果要在 MATLAB 中寫入文件,則以文本模式打開或創建新文件,然后在 Microsoft® 記事本或不會將 '\n' 識別為換行符序列的任意文本編輯器中打開該文件。寫入文件時,用 '\r\n' 結束每行。有關示例,請參閱 fprintf。否則,請以二進制模式打開文件以獲得更佳的性能。
要讀寫同一文件:
數據類型: char | string
machinefmt - 讀取或寫入字節或位的順序
'n' (默認) | 'b' | 'l' | 's' | 'a' | ...
在文件中讀取或寫入字節或位的順序,指定為以下字符向量或字符串標量之一。
| 'n' 或 'native' |
系統字節排序方式(默認) |
| 'b' 或 'ieee-be' |
Big-endian 排序 |
| 'l' 或 'ieee-le' |
Little-endian 排序 |
| 's' 或 'ieee-be.l64' |
Big-endian 排序,64 位長數據類型 |
| 'a' 或 'ieee-le.l64' |
Little-endian 排序,64 位長數據類型 |
默認情況下,當前支持的所有平台都使用 little-endian 排序方式對新文件進行排序。現有二進制文件可以使用 big-endian 或 little-endian 排序方式。
數據類型: char | string
encodingIn - 字符編碼
'UTF-8' | 'ISO-8859-1' | 'windows-1251' | 'windows-1252' | ...
后續讀寫操作使用的字符編碼,包括 fscanf、fprintf、fgetl、fgets、fread 以及 fwrite,指定為字符向量或字符串標量。該字符向量或字符串標量必須包含標准字符編碼方案名稱,如下所示。
| 'Big5' |
'ISO-8859-1' |
'windows-874' |
| 'Big5-HKSCS' |
'ISO-8859-2' |
'windows-949' |
| 'CP949' |
'ISO-8859-3' |
'windows-1250' |
| 'EUC-KR' |
'ISO-8859-4' |
'windows-1251' |
| 'EUC-JP' |
'ISO-8859-5' |
'windows-1252' |
| 'EUC-TW' |
'ISO-8859-6' |
'windows-1253' |
| 'GB18030' |
'ISO-8859-7' |
'windows-1254' |
| 'GB2312' |
'ISO-8859-8' |
'windows-1255' |
| 'GBK' |
'ISO-8859-9' |
'windows-1256' |
| 'IBM866' |
'ISO-8859-11' |
'windows-1257' |
| 'KOI8-R' |
'ISO-8859-13' |
'windows-1258' |
| 'KOI8-U' |
'ISO-8859-15' |
'US-ASCII' |
| |
'Macintosh' |
'UTF-8' |
| |
'Shift_JIS' |
|
如果您不指定編碼方案,fopen 將使用系統的默認編碼方案打開文件進行處理。有關詳細信息,請參閱使用不同的字符編碼打開文件。
如果為編碼指定的值不在支持的值列表中,則 MATLAB 會發出警告。有時(並非總是)指定其他編碼名稱會產生正確的結果。
數據類型: char | string
fileID - 已打開文件的文件標識符
整數
已打開文件的文件標識符,指定為整數。
數據類型: double
擴展功能
C/C++ 代碼生成
使用 MATLAB® Coder™ 生成 C 代碼和 C++ 代碼。
用法說明和限制:
-
代碼生成不支持:
-
permission 參數最多可以包含三個字符。字符必須是唯一的。
-
如果您禁用外部調用,則不能將使用 fopen 創建的文件標識符返回給 MATLAB 函數或外部函數。這些文件標識符只能在內部使用。
-
生成 C/C++ 可執行文件、靜態庫或動態庫時,最多可以打開 20 個文件。
-
生成的代碼不會報告因文件標識符無效而產生的錯誤。請在您自己的 MATLAB 代碼中自行編寫文件打開錯誤處理程序。測試 fopen 是否返回 -1,此值表示文件打開失敗。例如:
-
當您執行以下操作時,生成的代碼對於 fread 的行為取決於編譯器:
-
使用 fopen 和 a+ permission 打開文件。
-
在調用設置文件位置指示符的 I/O 函數(如 fseek 或 frewind)之前,使用 fread 讀取文件。