从C语言中删除文件中的行

Git*_*tmo 16 c file-io

我想删除文件中的某些行,并根据行的某些部分是否与指定的字符串匹配,在同一文件中插入某些行.有没有办法这样做而不使用临时文件将内容复制到等等?

Ale*_*lli 28

问题是,文件(基本上)是磁盘上的字节数组(或者其他任何物理基板,但无论如何都是字节!),"一行"可以采用不同数量的字节; 所以插入或删除行(除非你总是严格用另一行完全相同的字节长度替换一行)将需要"移位"文件的所有其余部分"向上"或"向下"字节差异...这可能是一个非常繁重的操作(因为文件的其余部分可能是千兆字节,即使您只是将一行的长度改为文件开头的1个字节).

因此,这样的操作可能非常繁重,因此通常不会作为支持具有可变行长度的文件(C,Python,Java,C++,Ruby或任何其他此类语言)的任何语言提供原语.你真的需要在性能和风险上支付这样一个潜在的未约束成本(在GB的"转换"期间系统或磁盘崩溃或数据上升或下降可能会破坏整个巨大文件的可用性),这是极不可能的.你试图避免的完全简单,充足,快速,安全和合理的技术基本上是零缺点(因此,为什么你试图避免它,这远非明显?).

使用与源文件不同的结果文件,当结果文件通过源文件完成时(大多数系统上的原子操作,如果你在同一个文件系统中),你真的最好的可能的世界.