首页 > 编程笔记 > MATLAB笔记 阅读:10

MATLAB feof()、ftell()、fseek()和frewind()随机读写文件(附带实例)

根据操作系统的规定,在读/写数据时,默认的方式总是从磁盘文件开始顺序向后在磁盘空间中读/写数据。操作系统通过一个文件指针来指示当前的文件位置。

C 或 FORTRAN 语言都有专门的函数来控制和移动文件指针,以达到随机访问磁盘文件的目的。

MATLAB 中也有类似的函数,控制文件内位置指针的函数如下表所示:

表:控制文件内位置指针的函数
函数 函数功能 函数 函数功能
feof 测试指针是否在文件结束位置 ftell 获取文件指针位置
fseek 设定文件指针位置 frewind 重置指针至文件起始位置

C语言feof()函数

feof() 函数用于测试指针是否在文件结束位置。

feof() 函数的调用格式为:
feof(fID)
如果标识为 fID 的文件的末尾指示值被置位,则此命令返回 1,说明指针在文件末尾;否则返回 0。

C语言fseek()函数

fseek() 函数用于设定文件指针位置,调用格式为:
status=fseek(fID, offset, origin)

如果返回值 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

相关文章