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

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

不得不寻找到流的末尾然后再返回到原始位置似乎真的很浪费,特别是如果流可能是到某些慢速媒体(例如CD或DVD)上的文件的时候。

最佳答案

“最佳”方法是避免长度:)

  • 并非所有流都是可搜索的(例如,想象一下网络套接字上的istream)
  • tellg()的返回类型不一定是数字(唯一的要求是可以将其传递回seekg()以返回相同位置)
  • 即使它是数字,也不一定是字节数。例如,它可以是“magic”值,意思是“最后”
  • 对于fstream,大小写和换行符转换之类的问题可能会破坏
  • 关于c++ - 确定std::istream长度的更好方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1631288/

    10-13 08:48