matlab中fopen 打開文件或獲得有關打開文件的信息


參考:https://ww2.mathworks.cn/help/matlab/ref/fopen.html?searchHighlight=fopen&s_tid=doc_srchtitle

 

個人認為返回的標識符是一個文件句柄handle, 網上的解釋是: MATLAB® 保留文件標識符 012 分別用於標准輸入、標准輸出(屏幕)和標准錯誤。

 

fopen

打開文件或獲得有關打開文件的信息

全頁折疊
 

說明

示例

fileID = fopen(filename) 打開文件 filename 以便以二進制讀取形式進行訪問,並返回等於或大於 3 的整數文件標識符。MATLAB® 保留文件標識符 012 分別用於標准輸入、標准輸出(屏幕)和標准錯誤。

如果 fopen 無法打開文件,則 fileID-1

fileID = fopen(filename,permission) 將打開由 permission 指定訪問類型的文件。

示例

fileID = fopen(filename,permission,machinefmt,encodingIn) 使用 machinefmt 參數另外指定在文件中讀寫字節或位時的順序。可選的 encodingIn 參數指定與文件相關聯的字符編碼方案。

示例

如果 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 = fopen('tsunamis.txt');

fileID 傳遞給 fgetl 函數以從文件讀取一行。

tline = fgetl(fileID)
tline =

  'A global tsunami data set in xlsx format, comprising the following file:'

關閉文件。

fclose(fileID)

請求要打開的文件的名稱

創建一條提示,要求提供待打開文件的名稱。如果 fopen 無法打開文件,則顯示相關錯誤消息。

fileID = -1;
errmsg = '';
while fileID < 0 
   disp(errmsg);
   filename = input('Open file: ', 's');
   [fileID,errmsg] = fopen(filename);
end

打開要寫入的文件並指定訪問類型、寫入順序、字符編碼

打開一個文件,使用 Shift-JIS 字符編碼寫入到文件。

fileID = fopen('japanese_out.txt','w','n','Shift_JIS');

'w' 輸入指定寫入權限,'n' 輸入指定本機字節排序方式,'Shift_JIS' 指定字符編碼方案。

獲取有關已打開文件的信息

假定您以前使用 fopen 打開了文件。

fileID = fopen('tsunamis.txt');

獲取所有已打開文件的文件標識符。

fIDs = fopen('all')
fIDs =

     3

獲取已打開文件的文件名稱及字符編碼。使用 ~ 代替您希望省略的輸出參數。

[filename,~,~,encoding] = fopen(fileID)
filename =

    'matlabroot\toolbox\matlab\demos\tsunamis.txt'


encoding =

    'windows-1252'

這里顯示的輸出內容有代表性。您的結果可能有所不同。

輸入參數

全部折疊

filename - 要打開的文件的名稱
字符向量或字符串標量

要打開的文件名稱(含文件擴展名),指定為字符行向量或字符串標量。如果該文件不在當前文件夾中,則 filename 必須包含完整或相對路徑。

在 UNIX® 系統上,如果 filename'~/''~username/' 開頭,則 fopen 函數分別延長路徑至當前用戶或指定用戶的主目錄。

  • 如要打開有讀取權限的文件而該文件不在當前文件夾中,則 fopen 將沿 MATLAB 搜索路徑進行搜索。

  • 如要打開有寫入或追加權限的文件而該文件不在當前文件夾中,則 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® 系統上,以文本模式:

  • 讀取操作如果遇到回車符后加換行符 ('\r\n'),則會從輸入中刪除回車符。

  • 寫入操作在輸出中的任何換行符之前插入一個回車符。

如果要在 MATLAB 中寫入文件,則以文本模式打開或創建新文件,然后在 Microsoft® 記事本或不會將 '\n' 識別為換行符序列的任意文本編輯器中打開該文件。寫入文件時,用 '\r\n' 結束每行。有關示例,請參閱 fprintf。否則,請以二進制模式打開文件以獲得更佳的性能。

要讀寫同一文件:

  • 采用帶加號 '+'permission 值打開文件。

  • 在讀寫操作之間調用 fseekfrewind。例如,不在調用 fread 后調用 fwrite,或調用 fwrite 后調用 fread,除非在它們之間調用 fseekfrewind

數據類型: 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' | ...

后續讀寫操作使用的字符編碼,包括 fscanffprintffgetlfgetsfread 以及 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

提示

  • 在大多數情況下,不必以文本模式打開文件。MATLAB 導入函數、所有 UNIX 應用程序以及 Microsoft Word 和寫字板都將 '\n' 識別為換行指示符。

擴展功能

C/C++ 代碼生成
使用 MATLAB® Coder™ 生成 C 代碼和 C++ 代碼。

用法說明和限制:

 

  • 代碼生成不支持:

    • 輸入參數 machinefmtencodingInfileID

    • 輸出參數 errmsg

    • 語法 fopen('all')

    • 以文本模式打開文件。即 permission 參數不能包含字母 t。例如,值不能為 'rt'

  • permission 參數最多可以包含三個字符。字符必須是唯一的。

  • 如果您禁用外部調用,則不能將使用 fopen 創建的文件標識符返回給 MATLAB 函數或外部函數。這些文件標識符只能在內部使用。

  • 生成 C/C++ 可執行文件、靜態庫或動態庫時,最多可以打開 20 個文件。

  • 生成的代碼不會報告因文件標識符無效而產生的錯誤。請在您自己的 MATLAB 代碼中自行編寫文件打開錯誤處理程序。測試 fopen 是否返回 -1,此值表示文件打開失敗。例如:

    ...
    fid = fopen(filename, 'r');
    if fid == -1
    		% fopen failed else % fopen successful, okay to call fread A = fread(fid); ...

     

  • 當您執行以下操作時,生成的代碼對於 fread 的行為取決於編譯器:

    1. 使用 fopena+ permission 打開文件。

    2. 在調用設置文件位置指示符的 I/O 函數(如 fseekfrewind)之前,使用 fread 讀取文件。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM