Ошибка чтения и записи длинного типа данных постепенно в C - PullRequest
0 голосов
/ 04 апреля 2019

У меня есть следующий код:

#include <stdio.h>
#include <stdlib.h>

int main() {
  long num = 0;
  FILE *fptr;

     if ((fptr = fopen("test_num.txt","r+")) == NULL){
         printf("Error! opening file");
         return -1;
     }

     fscanf(fptr,"%ld", &num);

     // Increment counter by 1
     num += 1;

     printf("%ld\n", num);
     fprintf(fptr, "%ld", num);
     fclose(fptr);

     return -1;

}

С помощью вышеупомянутого кода я пытаюсь прочитать содержимое файла, в котором всегда хранится длинное значение и ничего больше, увеличить значение на 1, а затем перезаписать значение lond файла с новым увеличенным значением. Тем не менее, я пытаюсь сделать это без закрытия и файла между чтением / записью. Например, рабочий процесс / алгоритм должен быть следующим:

Step 1: Open the file
Step 2: Read the long value from the file
Step 3: Increment the long value by 1
Step 4: Overwrite the long value of the file by new incremented value
Step 5: Close the file

Однако, если я использую вышеупомянутый код, тогда выходное значение добавляет увеличенное значение в конец файла вместо перезаписи. Я попытался открыть файл с помощью «w +» и «w», но, конечно, они работают только для записи, но не для чтения файла, как указано выше. Может кто-нибудь знает, что я могу сделать для достижения цели?

Ответы [ 2 ]

1 голос
/ 04 апреля 2019

Ответ таков: мне нужно перемотать файл ponter обратно на индекс 0 файла, чтобы перезаписать содержимое файла с увеличенным значением.Правильный код выглядит следующим образом:

#include <stdio.h>
#include <stdlib.h>

int main() {
  long num = 0;
  FILE *fptr;

     if ((fptr = fopen("test_num.txt","r+")) == NULL){
         printf("Error! opening file");
         return -1;
     }

     fscanf(fptr,"%ld", &num);

     // Increment counter by 1
     num += 1;

     printf("%ld\n", num);
     rewind(fptr); // Rewind to index 0 of the fptr
     fprintf(fptr, "%ld", num);
     fclose(fptr);

     return -1;

}
0 голосов
/ 04 апреля 2019

Существует два распространенных способа переписать части текстового файла:

  1. Считать файл while в память, внести изменения и записать его обратно с самого начала.

  2. Чтение частей файла (например, построчно), внесение изменений на лету и запись в новый временный файл.Затем переименуйте временный файл как фактический файл.

...