如何写在一个文件的中间在c

7gcisfzg  于 2023-01-08  发布在  其他
关注(0)|答案(2)|浏览(125)

有没有可能写在一个文件的中间,例如我想插入一些字符串在第5位置在第2行的一个文件在c中?我不是很熟悉的一些C函数,这是有关处理文件,如果有人能帮助我,我会很感激
我尝试使用fputs,但无法在所需位置插入字符

iezvtpos

iezvtpos1#

打开一个新的输出文件
逐行读取输入文件(fgets),在读取时将每一行写入一个新文件。
当你找到你想插入的地方时,写上新的一行
接着将旧行复制到新文件中
闭合输入输出
将输出文件重命名为输入

7ivaypg9

7ivaypg92#

继续我上面的评论,我会这么做:
1.创建两个大小相同的static char[]大缓冲区--每个缓冲区都足以存储您可能需要读入的最大文件(例如:10 MiB)。例如:

#define MAX_FILE_SIZE_10_MIB (10*1024*1024)
static char buffer_file_in[MAX_FILE_SIZE_10_MIB];
static char buffer_file_out[MAX_FILE_SIZE_10_MIB];

1.使用fopen(filename, "r+")以读取/更新方式打开文件。请参见:https://cplusplus.com/reference/cstdio/fopen/。使用fgetc()(参见my file_load() function for how to use fgetc())将字符逐个读入您创建的第一个大型字符缓冲区buffer_file_in。继续操作,直到将整个文件读入该缓冲区。
1.找到要插入的位置。注意:在第一次将文件读入buffer_file_in时,可以通过计算换行符来实时执行此操作('\n')来查看您所在的行。将字符从buffer_file_in复制到buffer_file_out,直到该点。现在,将新内容写入buffer_file_out中的该点。然后,在插入字符后完成将buffer_file_in的其余部分复制到buffer_file_out中。
1.使用fseek(file_pointer, 0, SEEK_SET);查找文件的开头
1.使用fwrite()buffer_file_out缓冲区内容写入文件。
1.使用fclose()关闭文件。
您可以在这里进行一些优化,例如将索引存储在您希望开始插入的位置,并且不将到该位置为止的字符复制到buffer_file_in中,而是将该位置之后的文件的剩余部分复制到buffer_file_in中。然后稍后查找到该点,只写入新内容和文件的其余部分。这避免了在插入点为all之前不必要地重写fie的开头。
(可能更好)你也可以直接复制文件和你插入的修改到buffer_file_out中,然后从文件的开头开始写回文件。这和@pm100的方法非常相似,除了使用1个文件+ 1个缓冲区而不是2个文件。
寻找其他适用的优化和冗余减少方法。
我上面的方法在RAM中使用1个文件和1个或2个缓冲区,具体取决于实现。@pm100的方法在RAM中使用2个文件和0个缓冲区(非常类似于我的1个文件和1个缓冲区的方法),具体取决于实现。

相关问题