从流中读取后,如何将光标设置回预读位置

After reading from an fstream how do I set the curor back to pre-read position?

本文关键字:设置 光标 位置 读取      更新时间:2023-10-16

我正在修改二进制数据的读取例程。不幸的是,我对C++不再那么坚定了,这是编写例程的语言。例程开始读取一些数据。之后,我希望它查看一个缓冲值,我也从文件中读取该值。根据值,代码应该执行某些操作并在之后正常继续,或者撤消读取缓冲区并正常继续。

我的问题是撤消或恢复光标位置,如果您愿意的话。剥离的代码如下所示:

int buffer;
std::fstream inputFile;
inputFile.open( "Filename", std::ios::in | std::ios::binary );
... // read some data from inputFile
// read buffer value
inputFile.read( reinterpret_cast<char *>(&buffer), sizeof(buffer) );
if( buffer == 256 ) {
    ... // do something here
} else
    // make it so nothing (including reading the buffer earlier) happened
    inputFile.seekg( -1*sizeof(buffer), std::ios::cur ); // <---- is this right?
    // or do I need to do it this way?
    inputFile.seekg( -1*sizeof(buffer)/sizeof(char), std::ios:cur );
}

我假设我可以在seekg()中使用负值,因为我发现 int 只有逻辑所有并且没有阅读任何相反的内容。以上哪种方式是正确的?或者基本上我在问seekg()实际上期望作为第一个论点是什么?

C++参考文献只说:

 iStream&Seekg (Streamoff Off, ios_base::Seekdir Way); 关闭    相对于 way 参数的偏移值。    流关闭是一种偏移类型(通常是有符号整数类型)。 道路    类型为 ios_base::seekdir.它可以采用以下任何常量值:    值偏移量相对于...    ios_base::乞求溪流的开头    ios_base::cur 流中的当前位置    ios_base::结束流的结束

这并没有告诉我off的单位是用(字节、字符、整数?

seekg()采用whence参数的版本采用std::streamoff作为参数。它可以是负面的。没有必要除以sizeof(char),因为sizeof(char)被定义为1。由于流 aleays 对字符进行操作,因此流使用的单元是字符,即流的第一个模板参数的类型。