【转载:博客】
目录
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® 保留文件标识符0
、1
和2
分别用于标准输入、标准输出(屏幕)和标准错误。- 如果
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
会为所有输出参数返回空字符向量。
示例
1.打开文件并将标识符传递给文件 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)
2.请求要打开的文件的名称
创建一条提示,要求提供待打开文件的名称。如果fopen
无法打开文件,则显示相关错误消息。
-
fileID =
-1;
-
errmsg =
'';
-
while fileID <
0
-
disp(errmsg);
-
filename = input(
'Open file: ',
's');
-
[
fileID,errmsg] = fopen(filename);
-
end
3.打开要写入的文件并指定访问类型、写入顺序、字符编码
打开一个文件,使用 Shift-JIS 字符编码写入到文件。
fileID = fopen('japanese_out.txt','w','n','Shift_JIS');
'w'
输入指定写入权限,'n'
输入指定本机字节排序方式,'Shift_JIS'
指定字符编码方案。
4.获取有关已打开文件的信息
假定以前使用 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 系统上,两种转换模式具有相同的效果。要以二进制模式打开文件,请指定以下各项之一。
| 打开要读取的文件。 |
| 打开或创建要写入的新文件。放弃现有内容(如果有)。 |
| 打开或创建要写入的新文件。追加数据到文件末尾。 |
| 打开要读写的文件。 |
| 打开或创建要读写的新文件。放弃现有内容(如果有)。 |
| 打开或创建要读写的新文件。追加数据到文件末尾。 |
| 打开文件以追加(但不自动刷新)当前输出缓冲区。 |
| 打开文件以写入(但不自动刷新)当前输出缓冲区。 |
要以文本模式打开文件,请将字母 't'
附加到 permission
参数,例如 'rt'
或 'wt+'
。
在 Windows® 系统上,以文本模式:
-
读取操作如果遇到回车符后加换行符 (
'\r\n'
),则会从输入中删除回车符。 -
写入操作在输出中的任何换行符之前插入一个回车符。
如果要在 MATLAB 中写入文件,则以文本模式打开或创建新文件,然后在 Microsoft® 记事本或不会将 '\n'
识别为换行符序列的任意文本编辑器中打开该文件。写入文件时,用 '\r\n'
结束每行。有关示例,可以参考fprintf函数。否则,请以二进制模式打开文件以获得更佳的性能。
要读写同一文件:
-
采用带加号
'+'
的permission
值打开文件。 -
在读写操作之间调用
fseek
或frewind
。例如,不在调用fread
后调用fwrite
,或调用fwrite
后调用fread
,除非在它们之间调用fseek
或frewind
。
数据类型: char
| string
machinefmt
- 读取或写入字节或位的顺序'n'
(默认) |'b'
|'l'
|'s'
|'a'
| ...
在文件中读取或写入字节或位的顺序,指定为以下字符向量或字符串标量之一。
| 系统字节排序方式(默认) |
| Big-endian 排序 |
| Little-endian 排序 |
| Big-endian 排序,64 位长数据类型 |
| 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
,指定为字符向量或字符串标量。该字符向量或字符串标量必须包含标准字符编码方案名称,如下所示。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
|
如果不指定编码方案,fopen
将使用系统的默认编码方案打开文件进行处理。
如果为编码指定的值不在支持的值列表中,则 MATLAB 会发出警告。有时(并非总是)指定其他编码名称会产生正确的结果。
数据类型: char
| string
fileID
- 已打开文件的文件标识符
整数
已打开文件的文件标识符,指定为整数。
数据类型: double
提示
-
在大多数情况下,不必以文本模式打开文件。MATLAB 导入函数、所有 UNIX 应用程序以及 Microsoft Word 和写字板都将
'\n'
识别为换行指示符。
</article>