参考: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
读取文件。
请发表评论