matlab中fopen 打开文件或获得有关打开文件的信息

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

个人认为返回的标识符是一个文件句柄handle, 网上的解释是: MATLAB® 保留文件标识符 012 分别用于标准输入、标准输出(屏幕)和标准错误。

fopen

打开文件或获得有关打开文件的信息

fileID = fopen(filename)

fileID = fopen(filename,permission)

fileID = fopen(filename,permission,machinefmt,encodingIn)

[fileID,errmsg] = fopen(___)

fIDs = fopen(\'all\')

filename = fopen(fileID)

[filename,permission,machinefmt,encodingOut] = fopen(fileID)

说明

示例

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 会为所有输出参数返回空字符向量。

示例

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 读取文件。