【问题标题】:How to read file in opposite direction in C++?如何在 C++ 中以相反的方向读取文件?
【发布时间】:2015-04-15 15:37:52
【问题描述】:

例如,我打开 ifstream,我希望它不是像往常一样从当前位置读取到结束,而是反向读取(从当前位置到开始)?

【问题讨论】:

  • 可能是 XY 问题;如果您希望数据向后,则向前读取并向后读取结果数据。
  • 我想知道那个的原因:D
  • 搜索到最后,然后向后搜索 X 个字节,其中 X 是您要读取的字节数。然后向后查找 X + Y 个字节,其中 Y 是您接下来要读取的字节数,等等。
  • 通常操作系统不支持。您必须确定文件的大小,寻找到最后 - 一页,阅读一页,处理并重复。 (这里可以确定页面大小)
  • std::ifstream file("input.txt"); std::vector<char> contents { std::istreambuf_iterator<char>{file}, std::istreambuf_iterator<char>{} }; .. 然后使用rbegin()rend() 迭代contents。好吧,这应该适用于较小的文件。

标签: c++ file ifstream


【解决方案1】:

您可以在 C++ 中使用随机文件操作。

对于ifstream ss,您可以编写命令ss.seekg(0, ios::end) 将文本文件中的指针移动到文本文件的末尾。现在您可以使用ss.seekg(-x, ios::current) current 从当前位置移动x 字节数,然后从该位置向前读取数据。然而,这是一个混乱的解决方案,因为您需要知道向后移动多少位,或者必须重复计算。有关 C++ 中随机文件操作的更多信息,请参阅 http://www.learncpp.com/cpp-tutorial/137-random-file-io/

【讨论】:

    【解决方案2】:

    如果你想读取单个字符,你可以这样:

        is.seekg(0,is.end);
        while(is.tellg()>1)
        {
                is.seekg(-2,ios::cur);
                char ch;
                is.read(&ch,1);
                cout<<ch<<" ";
        }       
    

    【讨论】:

      猜你喜欢
      • 2011-01-19
      • 2012-06-11
      • 1970-01-01
      • 2010-10-01
      • 1970-01-01
      • 2019-01-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多