wifstream.tellg()在流中推进位置?

时间:2016-02-04 02:16:19

标签: c++ visual-c++ iostream

我在Visual Studio 2015中使用iostream进行了一些基本的文件操作,并注意到了这种奇怪的行为。

#include <fstream>
#include <iostream>
#include <sstream>

void main(int argc, char** argv)
{
    std::wifstream stream("example.txt");
    //std::ifstream stream("example.txt");
    //std::wstringstream stream(L"abcdefghijklmnopqrstuvxyz");

    std::wcout << (char)stream.peek() << "\n"; // a
    stream.tellg();
    std::wcout << (char)stream.peek() << "\n"; // b
    stream.tellg();
    std::wcout << (char)stream.peek() << "\n"; // c
    stream.tellg();
    std::wcout << (char)stream.peek() << "\n"; // d
    stream.tellg();
    std::wcout << (char)stream.peek() << "\n"; // e
    stream.tellg();
    std::wcout << (char)stream.peek() << "\n"; // f
    stream.tellg();
    std::wcout << (char)stream.peek() << "\n"; // g
    stream.tellg();
}

example.txt包含:

abcdefghijklmnopqrstuvxyz

似乎stream.tellg()将流的当前字符提前一个。这仅适用于std::wifstream。似乎std::ifstreamstd::wstringstream不会受到影响。

这是visual studio stl实现中的错误吗?

1 个答案:

答案 0 :(得分:0)

此问题与wifstream/wfstream implementation bug in Visual C++ 2010类似。

斯蒂芬说:

  

调用tellg()时,C ++ Standard不提供行为保证   在文本模式下打开的文件。

我想这就是原因。