Я пытаюсь читать из файлов и записывать во временный файл. Тем не менее, я застрял в бесконечном цикле прямо сейчас. Функция ниже называется несколько раз рекурсивной функцией, которая проходит через каталоги для чтения файлов.Прочитайте один файл и напишите другому C
Мой подход заключается в том, что я буду читать каждое слово из одного файла, а затем эти слова в другой файл.
Функция у меня работает нормально, если я просто распечатываю каждое слово. Он печатает каждое слово в каждом файле во всех каталогах. Однако, когда я пытаюсь начать запись в временный файл (код прокомментирован), я застрял в цикле 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);
}
}
Уверены, что оно застрял в петле? Вы пробовали переходить через код, по очереди, в отладчик, чтобы убедиться, что код, который вы показываете, является проблемой? Может быть, это код, проходящий через каталог, который вызывает проблему, когда вы вдруг создаете новый файл? Вы должны действительно научиться использовать отладчик, чтобы помочь вам с такими проблемами. –
Кроме того, почему вы открываете временный файл в * двоичном * режиме? (Это не должно вызывать проблемы, но если вы пишете текст, тогда откройте его в текстовом режиме.) –
Не так ли, если вы входите в каталог, а затем пишите в ./tmp, вы можете на самом деле В конце концов, прочитайте этот файл ./tmp снова, как только вы снова залезете в рекурсию? –