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
ICP备案:
公安联网备案: