Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Запись в файл и отображение содержимого файла


Автор: Vokunya 4.12.2009, 10:24
Считываю содержимое файла на монитор.
Затем добавляю еще одну запись в файл.
Так вот если теперь вывести данные, то они будут такими же, как и до добавление, а новая запись отобразится только после перезапуска программы. 

Так записываю в файл:
Код

case 4:
{
 if ((file = fopen (fileName, "a+b")) == NULL)
     {
          fputs ("Couldn't open the file", stderr);
          exit (1);
     }
 if (count == MAXRECORDS)
     {
        fputs ("File is full", stderr);
        exit (1);
     }
 filecount = count;
 puts ("Input the number of bus or press \"Enter\" to exit");
 getchar ();
 while (count < MAXRECORDS && gets (bus [count].number) != NULL
                            && bus [count].number [0] != '\0')
       {
           puts ("Input destination");
           gets (bus [count].destination);
           puts ("Input departure time");
           gets (bus [count].departureTime);
           puts ("Input arrival time");
           gets (bus [count].arrivalTime);
           count++;
           if (count < MAXRECORDS)
                  puts ("Input the number of next bus");
       }
 if (count > 0)
      {
          fwrite (&bus [filecount], size, count - filecount, file);
      }
 break;
}


Считываю так:
Код

 case 6:
            {
                count = 0;
                 if ((file = fopen (fileName, "a+b")) == NULL)
                     {
                        fputs ("Couldn't open the file", stderr);
                        exit (1);
                     }
                 rewind (file);
                 puts ("\nCurrents contents of the file\n");
                 printf ("%8s %15s %18s %18s\n", "Number", "Destination", "Departure time", "Arrival time");
                 while (count < MAXRECORDS && fread (&bus [count], size, 1, file) == 1)
                      {
                           printf ("%8s  %14s %17s %17s\n", bus [count].number, bus [count].destination,
                                     bus [count].departureTime, bus [count].departureTime);
                           count++;
                      }
                break;
            }

т. е. запускаю программу, нажимаю 6 - правильно отображаются данные, нажимаю 4 - запись добавляется, опять 6 - новая запись не отображается
затем перезапускаю программу, 6 - новая запись отображается

Автор: djamshud 4.12.2009, 11:07
Делайте fflush после записи.

Автор: Vokunya 4.12.2009, 11:11
Все. Нашлись люди, которые ткнули носом в ошибку smile
в добавлении не закрывал файл
Код

fclose (file)


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)