MATLAB feof()、ftell()、fseek()和frewind()随机读写文件(附带实例)
根据操作系统的规定,在读/写数据时,默认的方式总是从磁盘文件开始顺序向后在磁盘空间中读/写数据。操作系统通过一个文件指针来指示当前的文件位置。
C 或 FORTRAN 语言都有专门的函数来控制和移动文件指针,以达到随机访问磁盘文件的目的。
MATLAB 中也有类似的函数,控制文件内位置指针的函数如下表所示:
feof() 函数的调用格式为:
如果返回值 status 为 0,则表示操作成功;如果为 -1,则表示操作失败。如果需要了解更多信息,则可以调用 ferror() 函数。
【实例】feof() 和 fseek() 函数应用示例。在命令行窗口中输入如下代码,并保存为 M 文件。
【实例】文件内位置控制综合示例。在命令行窗口中输入如下代码,并保存为 M 文件。
C 或 FORTRAN 语言都有专门的函数来控制和移动文件指针,以达到随机访问磁盘文件的目的。
MATLAB 中也有类似的函数,控制文件内位置指针的函数如下表所示:
函数 | 函数功能 | 函数 | 函数功能 |
---|---|---|---|
feof | 测试指针是否在文件结束位置 | ftell | 获取文件指针位置 |
fseek | 设定文件指针位置 | frewind | 重置指针至文件起始位置 |
C语言feof()函数
feof() 函数用于测试指针是否在文件结束位置。feof() 函数的调用格式为:
feof(fID)如果标识为 fID 的文件的末尾指示值被置位,则此命令返回 1,说明指针在文件末尾;否则返回 0。
C语言fseek()函数
fseek() 函数用于设定文件指针位置,调用格式为:status=fseek(fID, offset, origin)
- fID 是文件标识;
- offset 是偏移量,以字节为单位,可以是整数(表示向文件末尾方向移动指针)、0(不移动指针)或负数(表示向文件起始方向移动指针);
- origin 是基点,可以是 bof(文件的起始位置)、cof(指针的当前位置)、eof(文件的末尾),也可以用 -1、0 或 1 来表示。
如果返回值 status 为 0,则表示操作成功;如果为 -1,则表示操作失败。如果需要了解更多信息,则可以调用 ferror() 函数。
C语言ftell()函数
ftell() 函数用于返回现在的文件指针位置,其调用格式为:position=ftell(fID)返回值 position 是距离文件起始位置的字节数,如果返回 -1,则说明操作失败。
C语言rewind()函数
rewind() 函数用于将指针返回到文件起始位置,其调用格式如下:rewind(fID)
【实例】feof() 和 fseek() 函数应用示例。在命令行窗口中输入如下代码,并保存为 M 文件。
clear all a=[1:10]; %创建数组 fID=fopen('six.bin','w'); fwrite(fID,a,'short'); %写入文件 status=fclose(fID); %关闭文件 fID=fopen('six.bin','r'); six=fread(fID,'short'); %读取文件 eof=feof(fID); %判断测试指针是否在文件结束位置 frewind(fID); %将指针返回文件起始位置 status=fseek(fID,3,0); %设定指针位置 position=ftell(fID); %返回现在的指针位置 six' eof status position运行后,输出结果如下:
ans = 1 2 3 4 5 6 7 8 9 10 eof = 1 status = 0 position = 3
【实例】文件内位置控制综合示例。在命令行窗口中输入如下代码,并保存为 M 文件。
clear all A=magic(4) fID=fopen('dota.txt','w'); fprintf(fID,'%d\n','int8',A) fclose(fID); fID=fopen('dota.txt','r'); frewind(fID); %将指针放在文件起始位置 if feof(fID)==0 %如果没有到达文件末尾,则读取数据 [b,count1]=fscanf(fID,'%d\n') %把数据写入b中 position=ftell(fID) %获取当前指针位置 end if feof(fID)==1 %如果到达文件末尾,则重新设置指针 status=fseek(fID,-4,'cof') %把指针从当前位置向文件起始位置移动4个位置 [c,count2]=fscanf(fID,'%d\n') end fclose(fID);运行后,输出结果如下:
A = 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1 ans = 54 b = 105 110 116 56 16 5 9 4 2 11 7 14 3 10 6 15 13 8 12 count1 = 20 position = 64 status = 0 c = 2 1 count2 = 2