这是我的代码。

if(fseek(file,position,SEEK_SET)!=0)
{
  throw std::runtime_error("can't seek to specified position");
}

我曾经假设即使position大于文件中的字符数,此代码也可以正常工作(即抛出错误),但事实并非如此。因此,我想知道在尝试查找超出文件范围时如何处理查找失败?

最佳答案

好吧,您始终可以在执行fseek之前检查文件长度。

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);
}

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

关于c++ - fseek的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5028012/

10-12 16:16