从流中读取后,如何将光标设置回预读位置
After reading from an fstream how do I set the curor back to pre-read position?
我正在修改二进制数据的读取例程。不幸的是,我对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 对字符进行操作,因此流使用的单元是字符,即流的第一个模板参数的类型。
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 在C++/Linux中设置单调时钟的一些技巧
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 嵌套在类中时无法设置成员数据
- 在 macOS 中使用 C/C++ 设置鼠标光标图像
- 如何在QML中设置鼠标光标位置
- 如何在C++应用程序中设置"Select Precision"光标?
- 在系统设置光标位置之前获取和设置光标位置?
- 尝试在自定义 QT 创建器文本编辑器中创建查找和替换循环.我似乎无法设置光标位置
- 如何在应用程序窗口中设置光标位置?(C )
- 设置系统光标尺寸
- C 设置光标处的文件中的确切行
- 使用 Serial.Read 输入在 Arduino 上设置 LCD 光标
- 设置读取光标失败
- WinAPI / WPF:仅为应用程序设置系统光标
- 从流中读取后,如何将光标设置回预读位置
- 将文件拖到窗口中时设置光标
- 信号编辑文本已更改为可编辑的QComboBox设置光标位置在设置编辑文本之后的末尾
- 如何为标准输出设置控制台光标位置
- 如何在Windows中从鼠标挂钩设置光标位置?