參考: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
讀取文件。