更好的方法来确定std :: istream的长度?

Fli*_*tZA 7 c++ std stream

有没有比下面更好的方法来确定std :: istream的长度:

std::istream* pcStream = GetSomeStream();
pcStream->seekg(0, ios::end);
unsigned int uiLength = pcStream->tellg();
Run Code Online (Sandbox Code Playgroud)

只是寻求到流的末尾然后寻找原始位置似乎真的很浪费,特别是如果流可能是某些慢速媒体(如CD或DVD)上的文件.

Éri*_*ant 7

"最好"的方法是避免需要长度:)

  • 并非所有流都是可搜索的(例如,想象网络套接字上的istream)
  • tellg()的返回类型不一定是数字(唯一的要求是它可以传递回seekg()以返回到相同的位置)
  • 即使它是数字,也不一定是字节数.例如,它可能是一个"魔术"值,意思是"最后"
  • 对于fstream来说,case和linefeed转换等问题可能会让事情变得棘手