繁体   English   中英

用硬盘上的文件中的%20替换空格

[英]Replacing spaces with %20 in a file on hard disk

我已经遍历了前面发布的类似问题的所有答案, 在C中用%20替换空格 但是,我无法猜测如何在硬盘上有文件的情况下执行此操作,其中磁盘访问可能很昂贵,并且文件太长而无法一次加载到内存中。 如果可能的话,我们可以简单地加载文件并写入到相同的现有文件中。 此外,由于内存限制,我们希望替换原始文件而不创建新文件。

可怕的主意。 由于“%20”的长度比“”长,因此您不能只替换文件中的char,您必须将紧随其后的所有内容移回原处。 如果要在现有磁盘文件上进行操作,这将非常麻烦且昂贵。

您可以尝试在第一次通过时确定文件的总增长,然后考虑到块大小从文件的背面进行整个移位,并在遇到“”时调整移位。 但是就像我说的那样-混乱。 除非绝对必要,否则您真的不想这样做。

读取文件,进行替换,写入新文件,然后在旧文件上重命名新文件。

编辑:作为副作用,如果您的程序在执行操作时终止,则不会以半转换文件结尾。 这实际上就是许多程序即使不需要也要写入新文件的原因,以确保文件“始终”正确,因为新文件仅在成功写入后才替换旧文件。 这是一个简单的事务方案,它不考虑系统故障,但是对于应用程序故障(包括用户强行终止程序)非常有效

对于替换部件,您可以有两个缓冲区,一个要读入,另一个要把转换后的字符串写到磁盘,再写到磁盘。 根据您的内存限制,即使是很小的输入缓冲区(例如1KiB)也足够。 但是,为避免重复分配,您可以为输出保留一个固定的缓冲区,并使其具有输入缓冲区大小的三倍(最坏的情况是,输入为所有空格)。 总内存为4KiB,加上操作系统使用的任何缓冲区。 我建议使用磁盘块大小的倍数作为输入大小。

问题是您需要读取和写入同一文件。 不幸的是,这是不可能的。如果您逐字阅读,请想一想当到达空格时会发生什么……然后您必须写三个字符并覆盖文件中的后两个字符。 不完全是您想要的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM