[英]Edit the first line of a huge file in c++
是否有任何“快速”方式在C ++中编辑大文件(〜100Mg)的第一行?
我知道我们可以逐行读取文件,进行更改,将其写入临时文件并重命名该临时文件。 但是,我想知道是否有一种更快的方法(类似于就地修改)?
您可能可以使用fwrite
/ fprintf
文件操作方法来写文件,具体取决于文件指针的位置。
您使用fopen
打开文件进行追加,以fseek
开头并编写所需内容。 但是,您应该注意第一行的长度。 如果您写的内容少于原始行,您仍然会剩下多余的内容。 如果您编写更多内容,则将覆盖您的其他内容。
在现代计算机上,100MB并不大。 如果这是一次交易,并且您不是在运行速度非常慢的设备上工作,则可以简单地读取整个文件,将其拆分为几行,然后进行编辑并将其全部写回。
如果这是经常发生的事情,您可以从简单地在第一行添加一些空白填充(如果可能)中受益,以为您下次可以放置的内容创建一个“缓冲区”,从而从中受益。 然后,您可以使用fwrite覆盖第一行,而无需触摸文件的其余部分。
可能存在特定于OS和文件系统的方式,可以在不移动数据的情况下在现有文件内分配更多空间。 例如,在具有XFS / ext4的Linux上,您可以使用fallocate
:
int fallocate(int fd, int mode, off_t offset, off_t len);
fallocate()允许调用方直接为fd引用的文件操作文件分配的磁盘空间,该文件空间的字节范围从offset开始,直到len个字节。
我相信完成任务的最快方法是创建一个包含第一行值的新文件。 每当您请求读取文件时,都会先读取第一个行值文件,然后读取较大的文件,而跳过实际与较大文件一起存储的第一行。 每当您想更改第一行时,只需更改第一行文件即可。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.