我正在编写一个生成大型输出文件的 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/