c++ - 如何使用转到文件的第 m 行和第 n 个字符?

标签 c++

如果我想从文件中的第 m 行第 n 个字符插入或复制某些内容,我应该怎么做?有没有比使用 m 次 getline 和 seekp 更好的方法?谢谢。

最佳答案

Is there a way better than using getline for m times and seekp?

不是真的!行在操作系统级别并不“特殊”;它们只是由换行符分隔的文本文件的一部分。到达文本文件的 m 行的唯一方法是通读整个文件,直到看到 m - 1 换行符。您的 C++ 库的 getline() 函数可能已经非常有效地实现了该操作,因此您最好只使用它。

如果您的应用程序需要在单次运行期间多次查找大文件的特定行,则在启动时将整个文件读入数据结构(例如,一个结构数组,每个结构代表一行文字);完成此操作后,查找特定行就像查找数组一样简单。但是,如果您只需要查找特定行一次,则没有必要。

对于在较大文件中重复查找的内存效率更高的方法可能是记录遇到的每个行号的文件偏移量,这样您就可以轻松返回给定行而无需从头开始。不过,同样,只有在多次重复查找时才需要这样做。

关于c++ - 如何使用转到文件的第 m 行和第 n 个字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29837471/

相关文章:

c++ - VS 编译的二进制文件中的符号

c++ - 在 C++11 中,按值传递是一个合理的默认值吗?

c++ - 编写文本文件c++的有效方法

c++ - 使用 C++ 和 Qt 5 播放声音文件

c++ - 如何获取 ELF 二进制文件中与 objdump 输出的标签相对应的文件偏移量?

c# - 在非托管 C++ 中创建的 DX11 设备,用于 WPF 窗口

c++ - Apache Thrift 未定义对生成代码中 vtable 的引用

c++ - 在 boost::geometry::for_each_point 中使用 lambda

c++ - std::shared_ptr 为空但不为 null

c++ - 如何在 C++ 中更改二维数组中数字的位置?