fseek()用法 设定文件的当前读写位置

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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值