我正在尝试从文件中读取并写入临时文件。但是,我现在陷入无限循环。下面的函数由递归函数多次调用,该函数遍历目录以读取文件。
我的方法是,我会从一个文件中读取每个单词,然后将这些单词读取到另一个文件中。
如果我打印出每个单词,我的功能就可以了。它打印出所有目录中每个文件中的每个单词。但是,当我尝试开始写入临时文件(注释掉的代码)时,我陷入了while循环。
另一方面,如果我只是在测试程序中调用该函数一次,我只是从当前目录中的一个文件读取,并写入临时文件,那很好。
这就是我所拥有的(fileName
传入时实际上是绝对路径,而我../tmp
因此它不会被递归函数捕获):
void fileReadWrite(char *pattern, char *before, char *replace, char *fileName) {
FILE *file = fopen(fileName, "r");
if (file != NULL) {
int ch, word = 0;
while ((ch = fgetc(file)) != EOF) {
if (isspace(ch) || ispunct(ch)) {
if (word) {
word = 0;
putchar('\n');
}
}
else {
word = 1;
putchar(ch);
/*
FILE *f = fopen("../tmp", "wb"); // create and write
if (f == NULL)
{
printf("Error opening file!\n");
exit(1);
}
fprintf(f, "Some text"); // Or fprintf(f, ch);
fclose(f);
*/
}
}
fclose(file);
}
}
答案 0 :(得分:2)
您的代码中没有任何内容表明存在无限循环。但是,如果fileName
非常大,您可以打开和关闭" .. \ tmp"数百万次。正如Joachim Pileborg在评论中指出的那样,你应该在函数开头只打开一次该文件,并在最后再次关闭它。
如果您想在无限循环中说服自己不,请在每次迭代时打印出ch
的值。
答案 1 :(得分:0)
好的,所以我做了这个并且它有效。但我不明白为什么。有人可以解释一下吗?
year