fseek函数是用来设定文件的当前读写位置。
1. 头文件:
stdio.h
2. 函数原型:
int fseek(FILE *stream, long offset, int fromwhere);
参数:
- 第一个参数stream为文件指针
- 第二个参数offset为偏移量,整数表示正向偏移,负数表示负向偏移
- 第三个参数origin设定从文件的哪里开始偏移,可能取值为:SEEK_CUR、 SEEK_END 或 SEEK_SET
- SEEK_SET: 文件开头
- SEEK_CUR: 当前位置
- SEEK_END: 文件结尾
- SEEK_SET,SEEK_CUR和SEEK_END依次为:0,1和2.
简言之:
- fseek(fp,100L,0);把fp指针移动到离文件开头100字节处;
- fseek(fp,100L,1);把fp指针移动到离文件当前位置100字节处;
- fseek(fp,100L,2);把fp指针退回到离文件结尾100字节处。
3. 函数功能:
把stream的文件 读写位置指针 移到指定的位置。
4. 描 述:
- 函数设置文件指针stream的位置。
- 如果执行成功,stream将指向以fromwhere为基准,偏移offset个字节的位置。
如果执行失败(比如offset超过文件自身大小),则不改变stream指向的位置。 - 返回值: 成功,返回0,否则返回其他值。
5. 程序例:
例1:
#include <iostream>
#include <ctype.h>
#include <cvInclude.h>
//修改waqExpoConfig.txt文件的曝光值
int writeExpo(int &expo, char *filename)
{
//打开waqExpoConfig.txt文件
FILE *fp;
if ((fopen_s(&fp, filename, "rb+")) != 0)
{
printf("can not open the file\n");
exit(0);//终止程序
}
//修改waqExpoConfig.txt文件内容(曝光值)
//设定文件的当前读写位置:fp指向的位置是从文件开始后移0个字节
fseek(fp, 0, SEEK_SET);
//写文件:从fp指针指向的位置开始,写入:"ExpoVal : [%d]", expo
fprintf_s(fp, "ExpoVal : [%d]", expo);
//关闭waqExpoConfig.txt文件
fclose(fp);
//打印expo值
printf("ExpoVal : [%d]\n", expo);
return 0;
}
//通过键盘控制 曝光值的改变
int showImg(Mat &tempImg)
{
char* window = "img";
namedWindow(window, CV_WINDOW_AUTOSIZE);
imshow(window, tempImg);//显示图像
Mat saveImg = tempImg.clone();
//设置waqExpoConfig.txt文件夹的位置和初始expo
int expo = 10000;
char filename[100] = "F:\\opencv 窗口显示图像,增加调光&保存按钮\\test2\\test2\\Config\\waqExpoConfig.txt";
writeExpo(expo, filename);
while (true)
{
char key = cvWaitKey(10);
switch (key)
{
case 'u'://Up
expo += 10000;
writeExpo(expo, filename);
break;
case 'd'://Down
expo -= 10000;
writeExpo(expo, filename);
break;
};
if (key == 27) //Escape
break;
}
return 0;
}
int main(void)
{
Mat tempImg = imread("F:/test_photo/3.bmp", 1);
showImg(tempImg);
system("pause");
return 0;
}