c - C读取后无法写入文件
问题描述
我在程序中有一个函数必须从文件中删除给定的字符串。为此,将整个文件重写为临时文件,然后覆盖原始文件。使用已删除的字符串保存临时文件有效,但覆盖原始文件无效。
这里有什么问题?
#define MAXCHAR 10000
void delPath(char stringToDelete[], char bashrcDir[]) {
FILE *bashrc = fopen(bashrcDir, "r+");
char str[MAXCHAR];
if (bashrc != NULL) {
FILE *tempfile = fopen("./tempFile.txt", "w+");
// Create tempFile and copy content without given string
while (fgets(str, MAXCHAR, bashrc) != NULL) {
if (!strstr(str, stringToDelete)) {
fprintf(tempfile, "%s", str);
}
}
// Read tempFile and overwrite original file - this doesn't work
while (fgets(str, MAXCHAR, tempfile) != NULL) {
fprintf(bashrc, "%s", str);
}
fclose(tempfile);
}
fclose(bashrc);
}
r+ 允许您读取文件并覆盖它。我错了?
解决方案
参考@KamilCuk 的答案,这是解决方案:
#define MAXCHAR 10000
void delPath(char stringToDelete[], char bashrcDir[]) {
FILE *bashrc = fopen(bashrcDir, "r");
char str[MAXCHAR];
if (bashrc != NULL) {
FILE *tempfile = fopen("./tempFile.txt", "w");
while (fgets(str, MAXCHAR, bashrc) != NULL) {
if (!strstr(str, stringToDelete)) {
fprintf(tempfile, "%s", str);
}
}
fclose(bashrc);
fclose(tempfile);
FILE *newTempfile = fopen("./tempFile.txt", "r");
FILE *newBashrc = fopen(bashrcDir, "w");
while (fgets(str, MAXCHAR, newTempfile) != NULL) {
fprintf(newBashrc, "%s", str);
}
fclose(newTempfile);
fclose(newBashrc);
remove("./tempFile.txt");
}
}
谢谢!
推荐阅读
- reactjs - 侧边栏菜单由它自己呈现
- javascript - 如何解决 Javascript 中的“Uncaught TypeError: Object must be an instance of class”错误?
- python - 2个图之间的Python matplotlib交集以仅获取其中一个图的颜色
- python-3.x - 使用正则表达式提取一些日期
- c++ - 是 shared_ptr
::reset() 无锁? - c++ - 如何通过投影和视图矩阵变换顶点,是否需要碰撞检测?
- node.js - __filename 上下文中的 [eval] 是什么?
- powershell - Powershell使用If else语句执行while循环
- python - Cog 文件无法在同一目录中找到 .json 文件
- python - Python / Pandas / SQL 表问题