c - 在输出文件中的两点之间移动

标签 c

我正在编写一个生成大型输出文件的 C 程序。为了提高可读性,我想在文件的某些点收集某些类型的输出,而不是将其随机分散。

考虑这样一个文件:

log
log
(a)

output
output
output(b)

假设程序当前正在写入 (b) 处的行。 C中有没有一种特别优雅的方式可以达到移动到(a)点,添加line out输出,然后在(b)点恢复正常输出的效果?

我知道我可以使用标准 shell 工具(例如 csplit)在指定点拆分文件,将输出附加到前半部分,然后将其拼接在一起,从而实现这种效果。但是,此应用程序必须是跨平台的,因此我不能指望有可用的 shell。

任何建议都会很有帮助!

最佳答案

在单个文件中执行您所描述的操作的唯一方法是为前面的“日志”条目保留您需要的所有空间,我猜您不能这样做,因为您不知道它们会有多大。

您不能直接插入到文件中,将内容上移到插入点上方以腾出空间。这不是普通文件系统支持的概念。您需要物理读取和重写所有“输出”部分才能插入“日志”部分,随着文件的增长,这将需要越来越多的工作。

最好的办法是编写两个单独的文件,然后在最后将它们连接在一起。

编辑 根据 Sharpie 的评论:由于输出是程序的一组命令,这是否意味着您可以安全地假设它不会超过几 MB,并且只需在内存中构建它,然后再一次将其全部写出?

关于c - 在输出文件中的两点之间移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1144462/

相关文章:

c++ - Clion 不支持当前的 Cygwin 版本,如何安装它的早期版本?

c - 如何使用 PSoC 5LP 芯片的 SPI 写入 SD 卡?

c - 生成指针数组时出错

c - 我如何在 C 中将其相乘?

c - 硬编码指针值

c - GCC-将int分配给char时不应该发出警告吗?

c - 如何将C中的进程拆分为不同的进程?

c - 如何停止读取输入并分析C中的数据

c - 如何将字符串转换为二进制?

c - Windows 相当于 sync()