首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >fseek的问题

fseek的问题
EN

Stack Overflow用户
提问于 2011-02-17 18:56:29
回答 4查看 3.7K关注 0票数 2

这是我的代码。

代码语言:javascript
复制
if(fseek(file,position,SEEK_SET)!=0)
{
  throw std::runtime_error("can't seek to specified position");
}

我曾经假设,即使position大于文件中的字符数,这个代码也可以正常工作(即抛出错误),但它不会。所以我想知道当我试图在文件范围外查找时,如何处理查找失败?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-02-17 19:05:17

在执行fseek之前,您总是可以检查文件的长度。

代码语言:javascript
复制
void safe_seek(FILE* f, off_t offset) {
    fseek(f, 0, SEEK_END);
    off_t file_length = ftell(f);
    if (file_length < offset) {
        // throw!
    }
    fseek(f, offset, SEEK_SET);
}

但请注意,这不是线程安全的。

票数 2
EN

Stack Overflow用户

发布于 2011-02-17 19:14:40

根据manhttp://linuxmanpages.com/man3/fseek.3.phpfseek在发生错误时返回非零值,可能出现的错误只有:

EBADF指定的流不是可查找的流。

EINVAL fseek()的参数不是SEEK_SET、SEEK_END或SEEK_CUR。

对于lseek来说,超出文件末尾可能不被认为是错误。但是,之后立即调用feof可能表示文件不存在。

票数 0
EN

Stack Overflow用户

发布于 2011-02-17 19:18:53

代码语言:javascript
复制
if( fseek(file,position,SEEK_SET)!=0 || ftell(file) != position )
{
  throw std::runtime_error("can't seek to specified position");
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5028012

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档