Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

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

示例

全部折叠

打开文件并将文件标识符传递给 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'

这里显示的输出内容有代表性。您的结果可能有所不同。

输入参数

全部折叠

要打开的文件的名称,指定为包含文件扩展名的字符向量或字符串标量。

在 UNIX® 系统上,如果 filename'~/''~username/' 开头,则 fopen 函数分别延长路径至当前用户或指定用户的主目录。

根据文件的位置,filename 可以采用下列形式之一。

当前文件夹或 MATLAB 路径上的文件夹

指定 filename 中文件的名称。

如要打开有读取权限的文件而该文件不在当前文件夹中,则 fopen 将沿 MATLAB 搜索路径进行搜索。

如要打开有写入或追加权限的文件而该文件不在当前文件夹中,则 fopen 将在当前目录中创建一个文件。

示例:'sample_file.txt'

其他文件夹

如果该文件不在当前文件夹或 MATLAB 路径下的文件夹中,则在 filename 中指定完整或相对路径名。

示例:'C:\myFolder\myFile.sample_file.txt'

示例:'myFolder\sample_file.txt'

远程位置

如果文件存储在远程位置,则 filename 必须包含指定为统一资源定位器 (URL) 形式的文件的完整路径:

scheme_name://path_to_file/my_file.ext

根据您的远程位置,scheme_name 可以是下表中的值之一。

远程位置scheme_name
Amazon S3™s3
Windows Azure® Blob Storagewasbwasbs
HDFS™hdfs

如果您使用的是云文件系统,请设置环境变量以与远程文件系统通信。有关详细信息,请参阅处理远程数据

Hadoop 分布式文件系统 (HDFS) 卷中的文件无法以读写模式打开。

示例:'s3://bucketname/path_to_file/sample_file.txt'

示例: 'myFile.txt'

数据类型: char | string

文件访问类型,指定为字符向量或字符串标量。您可以用二进制模式或文本模式打开文件。在 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

在文件中读取或写入字节或位的顺序,指定为以下字符向量或字符串标量之一。

'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

后续读写操作使用的字符编码,包括 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 会使用自动字符集检测来确定编码。如果在打开文件进行写入时没有指定编码方案,fopen 默认使用 UTF-8,以便在所有平台和区域设置之间提供互操作性,而不会丢失或损坏数据。有关详细信息,请参阅使用低级 I/O 导入文本数据文件

如果为编码指定的值不在支持的值列表中,则 MATLAB 会发出警告。有时(并非总是)指定其他编码名称会产生正确的结果。

数据类型: char | string

已打开文件的文件标识符,指定为整数。

数据类型: double

提示

  • 在大多数情况下,不必以文本模式打开文件。MATLAB 导入函数、所有 UNIX 应用程序以及 Microsoft Word 和写字板都将 '\n' 识别为换行指示符。

扩展功能

版本历史记录

在 R2006a 之前推出

另请参阅

| | | | | | | | |