3.1 打开与关闭文件
打开和关闭文件是在使用MATLAB进行编程时经常要遇到的操作,下面将具体讲述这两种操作。
3.1.1 打开文件
操作系统一般都要求程序在使用或者创建一个磁盘文件时必须向操作系统发出打开文件的命令,且在使用完毕后还必须通知操作系统关闭这些文件。
MATLAB通过使用fopen函数来实现上述功能。该函数的语法结构为:
fid=fopen('filename', 'permission')
其中,filename是将要打开文件的文件名称,permission为要对文件进行处理的方式代号,其可以为下列字符串:
● 'r’ 只读文件(reading);
● 'w’ 只写文件,创建新文件或覆盖文件原有内容;
● 'a’ 增补文件,打开或创建新文件,并在文件尾增加数据;
● 'r+’ 读写文件;
● 'w+’ 创建新文件或覆盖文件原有内容;
● 'a+’ 打开或创建新文件,并读取或增补文件。
文件可以以二进制的形式或者文本形式打开(默认情况下是前者)。
● 在二进制形式下,字符串不会被特殊对待。
● 如果要求以文本形式打开,则在permission字符串后面加’t',例如’rt+', 'w+t’等。需要说明的是,在UNIX下,文本形式和二进制形式没有什么区别。
fid是一个非负整数,称为文件标识,对于文件的任何操作都是通过这个标识值来传递的,MATLAB通过这个值来标识已打开的文件,实现对文件的读、写和关闭等操作。
正常情况下fid是一个非负整数,这个值是由操作系统设定的。如果返回的文件标识为’-1',则表示fopen无法打开该文件,原因可能是该文件不存在;而以’r’或’r+’方式打开时,也可能是用户无权限打开此文件。
程序设计中,每次打开文件,都要进行打开操作是否正确的测定。如果要知道fopen操作失败的原因,可以使用下列方式进行调用。
例3-1,以只读方式打开log、exp、cos函数和不存在的tttt函数对应的文件。
在命令行窗口中输入:
[fid1, messange1]=fopen('log.m', 'r') [fid2, messange2]=fopen('exp.m', 'r') [fid3, messange3]=fopen('cos.m', 'r') [fid4, messange4]=fopen('tttt.m', 'r') 输出结果如下所示: fid1 = 3 messange1 = '' fid2 = 4 messange2 = '' fid3 = 5 messange3 = '' fid4 = -1 messange4 =No such file or directory
注意
需要说明的是,前面几条语句返回值仅是标示,不代表具体的文件,且在不同的情况下运行可能数值不同。
在程序设计中,为了后续操作的顺利进行,每次打开文件都要判断是否正确打开文件。具体代码如下:
[fid, message]=fopen('filename', 'r'); if fid==-1 disp(message); end
例3-2,如果目标文件存在,用函数fopen按只读的方式打开文件。
在命令行窗口中输入:
[fid, message]=fopen('tan.m', 'r') if fid==-1 disp(message) end
命令行窗口中的输出结果如下:
fid = 6 message = ''
3.1.2 关闭文件
文件打开并完成读写操作后,必须关闭文件,以免打开文件过多而造成系统资源浪费。关闭文件的命令为:
status=fclose(fid)
注意
其中fid参数为关闭文件的文件标识,是打开该文件时的返回值;如果关闭成功,则返回status值为0;否则返回-1。
例3-3,打开与关闭文件。
在命令行窗口中输入:
[fid1, messange1]=fopen('log.m', 'r') ; %打开文件 [fid2, messange2]=fopen('exp.m', 'r'); %打开文件 [fid3, messange3]=fopen('cos.m', 'r'); %打开文件 status1=fclose(fid1); %关闭文件 status2=fclose(fid2); %关闭文件 status3=fclose(fid3); %关闭文件 status=[status1 status2 status3]
输出结果如下:
status = 0 0 0
上述命令打开并关闭了文件标识为fid1~fid3的文件,如果要一次关闭所有打开的文件,则需执行下面的代码:
status=fclose('all')
用户可以通过检查status的值来确认文件是否关闭。
在某些情况下,可能需要用到暂存目录及临时文件,要取用系统的暂存目录,tempdir函数可以实现这一功能,输入如下命令:
directory=tempdir
输出结果可能如下:
directory =C:\Users\ADMINI~1\AppData\Local\Temp\
要打开一个临时文件,可用tempname命令:
filename=tempname
输出结果可能如下:
filename = C:\Users\ADMINI~1\AppData\Local\Temp\tp3cf05588_7631_4c4d_a931_663146207ca1
注意
在使用文件打开或关闭函数时,尽量不要将对文件的打开和关闭操作放置于循环中来提高程序的效率。