c++ 仅读取文本文件最后一行的最快方法?

2024-03-22

我只想读取文本文件的最后一行(我在 UNIX 上,可以使用 Boost)。我知道的所有方法都需要扫描整个文件才能获取最后一行,这根本没有效率。有没有一种有效的方法只获取最后一行?

另外,我需要它足够强大,即使有问题的文本文件不断被另一个进程附加到该文件中,它也能正常工作。


使用eekg 跳转到文件末尾,然后回读直到找到第一个换行符。 下面是我使用 MSVC 想到的一些示例代码。

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

using namespace std;

int main()
{
    string filename = "test.txt";
    ifstream fin;
    fin.open(filename);
    if(fin.is_open()) {
        fin.seekg(-1,ios_base::end);                // go to one spot before the EOF

        bool keepLooping = true;
        while(keepLooping) {
            char ch;
            fin.get(ch);                            // Get current byte's data

            if((int)fin.tellg() <= 1) {             // If the data was at or before the 0th byte
                fin.seekg(0);                       // The first line is the last line
                keepLooping = false;                // So stop there
            }
            else if(ch == '\n') {                   // If the data was a newline
                keepLooping = false;                // Stop at the current position.
            }
            else {                                  // If the data was neither a newline nor at the 0 byte
                fin.seekg(-2,ios_base::cur);        // Move to the front of that data, then to the front of the data before it
            }
        }

        string lastLine;            
        getline(fin,lastLine);                      // Read the current line
        cout << "Result: " << lastLine << '\n';     // Display it

        fin.close();
    }

    return 0;
}

下面是一个测试文件。它成功处理文本文件中的空数据、单行数据和多行数据。

This is the first line.
Some stuff.
Some stuff.
Some stuff.
This is the last line.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c++ 仅读取文本文件最后一行的最快方法? 的相关文章

随机推荐

  • 即使删除文件后,开发日志文件仍超出 GitHub 的文件大小限制

    我尝试在我的应用程序中提交一些更改 但收到一条错误 指出开发日志太大 为 512MB 我删除了开发日志文件并再次尝试 仍然出现相同的错误 日志大小为 103 2MB 我也尝试过rake log clear有同样的错误 显然开发日志文件正在被
  • Web API 2 是否可以以编程方式加载路由/控制器?

    我目前正在开发一个企业 Web 应用程序 该应用程序使用 WCF 来实现 REST API 它利用 VirtualPathProvider 捕获对 svc 文件 实际上并不存在 的请求 然后动态构建它们以动态加载关联的 WCF 服务 这允许
  • 如何查找 mstsc 的使用时间以及由谁使用?

    我们的团队地理位置分散 他们会使用远程桌面连接许多虚拟机 我想了解谁正在访问远程桌面会话以及使用了多长时间 我尝试用 powershell 来实现 我编写了一个脚本 用户将在其中使用 powershell 调用 mstsc 它将记录谁已登录
  • 单表继承和Yaml配置

    我想在我的项目中使用 symfony2 doctrine 的单表继承 但我找不到任何带有 yaml 配置的工作示例 官方文档中仅提供了注释配置 我找到了 xml 示例 但我想使用 yaml 配置 有人可以帮助并分享一些工作代码吗 好的内置转
  • 如何使用迭代器迭代二维ArrayList?

    我想迭代二维ArrayList包括String使用迭代器的对象 我还想以一种让我选择是否要首先水平 行 迭代还是垂直 列 迭代的方式使用boolean价值 我怎样才能在java中实现这个 到目前为止我已经尝试过的 public class
  • 如何在 MySQL 中执行“如果不存在则插入”?

    我首先通过谷歌搜索找到了这篇文章如何在标准 SQL 中编写 INSERT if NOT EXISTS 查询 http www xaprb com blog 2005 09 25 insert if not exists queries in
  • 如何在 C++ 中验证字符串是否为有效的 IPv4 地址?

    我不需要验证 IP 地址是否可达或类似的内容 我只想验证该字符串是否采用点分四组 xxx xxx xxx xxx IPv4 格式 其中 xxx 介于 0 到 255 之间 您可能想要内特 pton http man7 org linux m
  • 我可以在 AWS Lambda 函数上存储临时文件吗?

    我正在编写一个用于文件提取的 lambda 函数 并且需要在执行此函数时存储文件 因此需要将该文件存储在 aws lambda function 中 是否可以在 lambda 上存储文件 是的 引用自 AWS Lambda 常见问题解答 每
  • Visual Studio 2010 Express。写入输出窗口

    我是 Visual Studio 和 Windows Phone 7 开发新手 我确实激活了重定向所有输出文本选项 但 Debug Writeline 或 Console WriteLine 都不起作用 我如何记录信息 我也花了一段时间才找
  • 分布式任务队列(例如 Celery)与 crontab 脚本

    我无法理解 分布式任务队列 的用途 例如 python 的芹菜库 http www celeryproject org 我知道在 python 框架 celery 中 您可以设置定时窗口来执行函数 然而 这也可以在针对 python 脚本的
  • PostgreSQL 无法打开文件“base/xxxx/xxxxx”没有这样的文件或目录

    最近 我的 Linux 机器上出现了硬件故障 在修复硬件问题并恢复我的 Linux 机器后 当我对其中一个表执行查询时 返回以下错误 ERROR could not open file base 17085 281016 No such f
  • 创建动态分组依据

    df data frame A c 1 4 5 13 2 B c Group 1 Group 3 Group 2 Group 1 Group 2 C c Group 3 Group 2 Group 1 Group 2 Group 3 df
  • GUI 作为有限状态机

    为了实现应用程序的 GUI 我希望将所有逻辑从一种形式集中到另一种形式 该 GUI 管理器将充当有限状态机 虽然我想我在某处见过这种实现 但我找不到与这种解决方案相匹配的设计模式 表单将如下所示 public class Login For
  • 因它能做什么或因为它做了而关闭

    好吧 这是一个有点迂腐的问题 但我想确保我正确理解了这个定义 闭包绰号是用来描述匿名函数的can提升局部作用域中的变量 无论它们实际上是否这样做 或仅当它们do在局部范围内提升变量 换句话说 如果匿名函数具有ability在其本地范围内提升
  • 从 .lm.fit() 计算 p 值的快速方法

    我正在运行模拟并拟合线性模型 lm fit https www rdocumentation org packages pbdDMAT versions 0 4 2 topics lm fit 尽管速度极快 但该函数不提供预测变量的 p 值
  • 如何仅使用 GPX 文件进行 UI 测试

    我正在尝试使用 GPX 文件来模拟运行 UI 测试时的位置 我已在 测试位置 下选择了 GPX 文件 但这不起作用 我刚刚收到一个错误 告诉我 位置不可用 我知道 我可以进入 运行 gt 调试 然后激活 允许位置模拟 然后选择该文件作为 默
  • 从 GWT 访问 Web 服务

    有什么方法可以使用 GWT 的 WSDL 访问 Web 服务吗 以前我试图使用 ws import 生成的类 但后来有人向我指出 GWT 无法处理所有 Java 只能处理它的一个子集 因此它无法理解 ws import 类 感谢致敬 Krt
  • 为什么默认情况下不使用 Control.Monad.Instances 实现 (->)

    我正在读书LYAH http learnyouahaskell com functors applicative functors and monoids 它说我需要显式加载Control Monad Instances使以下语法起作用 f
  • 验证关联的唯一性

    给定以下课程 class Candidate has many applications has many companies through gt job offers end class JobOffer belongs to comp
  • c++ 仅读取文本文件最后一行的最快方法?

    我只想读取文本文件的最后一行 我在 UNIX 上 可以使用 Boost 我知道的所有方法都需要扫描整个文件才能获取最后一行 这根本没有效率 有没有一种有效的方法只获取最后一行 另外 我需要它足够强大 即使有问题的文本文件不断被另一个进程附加