这是我的代码。
if(fseek(file,position,SEEK_SET)!=0)
{
throw std::runtime_error("can't seek to specified position");
}我曾经假设,即使position大于文件中的字符数,这个代码也可以正常工作(即抛出错误),但它不会。所以我想知道当我试图在文件范围外查找时,如何处理查找失败?
发布于 2011-02-17 19:05:17
在执行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);
}但请注意,这不是线程安全的。
发布于 2011-02-17 19:14:40
根据man:http://linuxmanpages.com/man3/fseek.3.php,fseek在发生错误时返回非零值,可能出现的错误只有:
EBADF指定的流不是可查找的流。
EINVAL fseek()的参数不是SEEK_SET、SEEK_END或SEEK_CUR。
对于lseek来说,超出文件末尾可能不被认为是错误。但是,之后立即调用feof可能表示文件不存在。
发布于 2011-02-17 19:18:53
if( fseek(file,position,SEEK_SET)!=0 || ftell(file) != position )
{
throw std::runtime_error("can't seek to specified position");
}https://stackoverflow.com/questions/5028012
复制相似问题