将整个文件读入stringstream

时间:2014-05-13 23:51:15

标签: c++

所以,我想通过某种流解析文件,我确实可以简单地使用ifstream类,但问题是我的目标是性能和所有那些>> ifstream类的运算符可能真的会减慢我的程序。 所以我想出了以某种方式将整个文件读入std :: stringstream,然后使用stringstream解析文件的想法。 我想做这样的事情,但我无法让它发挥作用:

std::ifstream fin( p_Filename.c_str( ) );
fin.seekg( 0, std::ifstream::end );
int fileSize = static_cast<int>( fin.tellg( ) );
fin.seekg( 0, std::ifstream::beg );

std::stringstream       ss;
ss.str( ).resize( fileSize );
fin.read( const_cast<char*>( ss.str( ).c_str( ) ), fileSize );

2 个答案:

答案 0 :(得分:1)

  1. 获取文件的大小,就像您所做的那样。
  2. 分配一个char数组来保存内容。
  3. 使用char将整个文件读入istream::read数组。
  4. 创建一个使用istringstream数组的char。用它来解析数据。
  5. 取消分配char
  6. 的数组

    <强>更新

    如果要遵循此策略,请确保以二进制模式打开文件。谢谢@ooga。

答案 1 :(得分:0)

您的结论无效。

如果>>运算符将成为开销,它们将对字符串进行相同的开销操作,并且在处理任何文件之前读取整个文件只会增加延迟,即浪费时间和空间。

您不需要这样做。确保fstream.

上有足够的缓冲