欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

关于fseek不能定位大于2G文件的问题

发布时间:2025/3/15 编程问答 30 豆豆
生活随笔 收集整理的这篇文章主要介绍了 关于fseek不能定位大于2G文件的问题 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

      最近在进行文件断点续传的时候用到了fseek来定位文件位置,一开始用小文件测试没有发现什么问题,但是用大于2G的文件测试的时候fseek打印出错,查相关资料,发现fseek的第二个参数类型是long,也就是说只能定位2G以内的文件,另外有两个类似的函数fseeko和fseeko64,fseeko类似于fseek,不同的是fseeko的第二个参数类型是off_t,另外还有一个宏#define _FILE_OFFSET_BITS 64可以将off_t指定为64位,从而可以定位大文件,fseeko64则直接支持定位大文件,不幸的是fseeko和fseeko64是实现相关的,至少在我的平台上fseeko不支持#define _FILE_OFFSET_BITS 64这个宏,更没有fseeko64这个函数。

         考虑到文件是下载到手机上(client端)的,目前的大多数手机也只支持4G以下的文件,所以server端可以用下面代码解决文件定位:

    /*文件大于2G的时候会有兼容性问题*/
    if(startPos <= 2147483647)
    {    /*顺序定位*/
        if(fseek(resource, startPos, SEEK_SET) != 0)
        {
            printf("[partial_cat] fseek error!\n");
        }
    }
    else
    {
        /*逆序定位*/
        long long rStartPos = (fileSize - 1) - startPos;
        if(fseek(resource, rStartPos, SEEK_END) != 0)
        {
            printf("[partial_cat] reverse fseek error!\n");
        }
        
    }

          当然如果文件大于4G,就得另想办法了!
 

总结

以上是生活随笔为你收集整理的关于fseek不能定位大于2G文件的问题的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。