c - 如何在文件中查找字符串并使用 C 在文件中紧接该搜索字符串的下一行写入新字符串
问题描述
我需要一个建议来使用 c 程序在文件中查找和写入字符串。
例如 File.txt 有以下内容
aaaaa bbbbb
ccccc ddddd
eeeee fffff
ggggg
在这里,我想搜索一个字符串“ddddd”并在这一行之后写入新字符串(“MMMM NNNN”),如
添加新字符串后,文件将具有以下内容,
aaaaa bbbbb
ccccc ddddd
MMMM NNNN
eeeee fffff
ggggg
以下是我试图使其工作并仍在工作的示例代码
int main(int argc, char *argv[])
{
------
------
/* Opening a file based on command line argument*/
fptr = fopen(argv[1], "rw");
while(fgets(buf, buflen, fptr))
{
------------
{
/*Checking the key string "ddddd" and if presents then have to add "MMMM NNNN" in immediate next line*/
if (strstr(buf, "ddddd"))
{
printf("Found Matching for : %s\n", argv[3]);
fprintf(fptr, "\n%s\n", "MMMM NNNN");
}
}
}
----------
}
有没有办法在不创建新文件的情况下更新现有文件?
提前感谢您的回复。
解决方案
您需要“假脱机”文件。也就是说,打开文件进行读取,打开一个新文件进行写入,从文件中读取,“做你的事情”并写入新文件,关闭文件,删除旧文件并将新文件重命名为旧文件. 编码这个你必须自己做。
请注意,文本文件本质上是一个顺序文件。这意味着,如果您以读/写模式打开文件,则不能“插入”数据,因为这会覆盖其他现有数据。
推荐阅读
- java - 每当 Android 谷歌地图的位置发生变化时相机如何移动
- reactjs - 在 useEffect 挂钩中设置状态以及 AsyncStorage 会导致无限循环?
- postgresql - 如何在 PostgreSQL 中使用相同的冲突目标对多行进行 UPSERT?
- github - GitHub markdown indent 悬挂缩进
- terraform - 需要帮助调用 for_each 中的数据源
- r - 在 R 中合并而不在数据集之间复制具有相同名称的列
- nginx - 可以在 nginx 中进行动态标头响应吗?
- java - 错误构建酒井“无法传输文件:http://repo1.maven.org/maven2/zing/cql-java/0.7/cql-java-0.7.pom。返回代码为:501”
- javascript - 如何在javascript中转义字符串中的正斜杠?C# web api 无法识别正斜杠
- javascript - 如何在节点中显示 JSON 中的一个字段