C File Сохранить и восстановить входную информацию - PullRequest
0 голосов
/ 08 марта 2019

У меня есть программа на основе структуры с различной информацией. В этой программе вы можете, например, добавлять людей, удалять людей и т. Д. Я уже все это сделал, так что программа сама сделана. Но файлы не являются.

Итак, я пытаюсь написать код, который «сохраняет», если я, например, добавлю человека, и это «сохранит», когда я решу выйти из программы. И код, который «восстанавливает» людей в файле в начале программы.

У кого-нибудь есть идеи или советы? Я новичок в программировании и пытаюсь учиться. Я сидел с этим в течение нескольких дней. Прежде чем «восстановить», я прошу открыть файл, и если этот файл не существует, создается новый, и это работает. Поэтому, если у меня будет файл с 3 сотрудниками, и я открою этот файл, я бы хотел восстановить его, а затем добавить в него больше сотрудников и т. Д.

Ответы [ 2 ]

1 голос
/ 08 марта 2019

Вы должны написать (и прочитать) в два этапа: сначала структура, а затем массив, на который указывает структура. Фрагмент кода для записи (например, без проверки ошибок, которая необходима):

#include <stdio.h>
// ...
employees emp;
const char* filename="your_filename";
// populate emp;
FILE* file = fopen(filename,"w");
fwrite(&emp,sizeof(employees),1,file);
fwrite(emp.pic,sizeof(int),emp.imageCount,file);
fclose(file);

Теперь у вас есть массив после структуры в вашем файле. Прочтите это так же:

FILE* file = fopen(filename,"r");
fread(&emp,sizeof(employees),1,file);
emp.pic=calloc(sizeof(int), emp.imageCount); 
fread(emp.pic,sizeof(int),emp.imageCount,file);

Пожалуйста, не забудьте проверить наличие ошибок (см. man fopen|fread|fwrite|calloc). Если у вас есть несколько структур, вы должны повторить два шага для любого элемента.

0 голосов
/ 08 марта 2019

Что такое платформа?Для Windows существует простой формат .INI файлов с содержанием, таким как:

[Employee_1]
id=123
name=Smith
imageCount=2
...

. Вы можете использовать функции API GetPrivateProfileString / GetPrivateProfileInt и WritePrivateProfileString для чтения и хранения информации.Используйте отдельный раздел для каждого сотрудника.Один общий раздел необходим для хранения количества разделов сотрудников.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...