【发布时间】:2014-11-21 06:56:47
【问题描述】:
在尝试以文本模式 (Windows) 读取简单的 ANSI 编码文本文件时,我遇到了 seekg() 和 tellg() 的一些奇怪行为;任何时候我尝试使用 tellg(),保存它的值(作为 pos_type),然后再寻找它,我总是会在流中比我停止的位置更靠前。 p>
最后我做了一个健全性检查;即使我只是这样做......
int main()
{
std::ifstream dataFile("myfile.txt",
std::ifstream::in);
if (dataFile.is_open() && !dataFile.fail())
{
while (dataFile.good())
{
std::string line;
dataFile.seekg(dataFile.tellg());
std::getline(dataFile, line);
}
}
}
...然后,最终,在文件的更深处,行被截断了一半。为什么会发生这种情况?
【问题讨论】:
-
你用的是什么编译器?
-
我正在使用 MinGW 的 C++ 编译器。
-
不使用
binary会怎样? -
啊,对不起;
std::ifstream::binary不应该在那里,我的错。这仅在文本模式下发生;在二进制模式下,它工作正常。 -
您无法可靠地寻找文本流。 CRT 缓冲流,因此它可以可靠地将字节转换为字符。所以你确实看到流的位置太靠前了。对此没有创可贴,只要您期望 CRT 为您返回字符,您就无法使其工作。
标签: c++