Не удается заменить слово в файле с помощью языка Си
У меня есть 2 функции заменить и заменить резервным копированием следующим образом:
void replace_j(char* oldWord, char* newWord) { printf("without\n"); printf("%s\n",oldWord); printf("%s\n",newWord); FILE * fPtr; FILE * fTemp; FILE* f; char path[100]; char file[BUFFER_SIZE]; char buff[BUFFER_SIZE]; // char oldWord[100], newWord[100]; f= fopen("files_to_be_scanned.txt", "r"); while (!feof(f)) { fgets(file,sizeof(file),f); // file[strlen(file) - 1] = '\0'; printf("\nfile is %s\n",file); strcpy(path,file); printf("path is %s\n",path); path[strlen(path) - 1] = '\0'; fPtr = fopen(path, "r"); if(fPtr == NULL) { perror("error"); } fTemp = fopen("replace.tmp", "w"); /* fopen() return NULL if unable to open file in given mode. */ if (fPtr == NULL || fTemp == NULL) { /* Unable to open file hence exit */ printf("\nUnable to open file.\n"); printf("Please check whether file exists and you have read/write privilege.\n"); exit(EXIT_SUCCESS); } /* * Read line from source file and write to destination * file after replacing given word. */ while ((fgets(buff, BUFFER_SIZE, fPtr)) != NULL) { // Replace all occurrence of word from current line replaceAll(buff, oldWord, newWord); // After replacing write it to temp file. fputs(buff, fTemp); } /* Close all files to release resource */ fclose(fPtr); fclose(fTemp); /* Delete original source file */ remove(path); /* Rename temp file as original file */ rename("replace.tmp", path); printf("\nSuccessfully replaced all occurrences of '%s' with '%s'.\n", oldWord, newWord); } } void replace_with_backup(char* OldWord,char* NewWord) { printf("b\n"); char filename[100]; int j=0; FILE *fptr1, *fptr2; //int k=num_files; printf("%d\n",num_files); while(num_files) { printf("Enter the filename to open for writing %s\n",buffer[j]); scanf("%s", filename); fptr1= fopen(buffer[j], "r"); if (fptr1 == NULL) { printf("Cannot open file %s \n", filename); exit(0); } // Open another file for writing fptr2 = fopen(filename, "w"); if (fptr2 == NULL) { printf("Cannot open file %s \n", filename); exit(0); } c = fgetc(fptr1); while (c != EOF) { fputc(c, fptr2); c = fgetc(fptr1); } printf("\nContents copied to %s\n", filename); j++; num_files--; } fclose(fptr1); fclose(fptr2); replace_j(OldWord,NewWord); }
функция замены прекрасно работает с аргументами:
а заменить я его ... file1.txt file2.txt file3.txt
но при использовании его с функцией резервного копирования он заменяет только последний файл
Что я уже пробовал:
Я попытался отследить и проверить каждую функцию по отдельности и все работает нормально но с комбинацией этих двух есть проблема