PDA

View Full Version : مبتدی: ذخیره لیست پیوندی در فایل



ali1368
چهارشنبه 09 آذر 1390, 22:26 عصر
سلام ببخشید میخواستم بدونم چه جوری میتونم اطلاعات لیست پیوندی را در فایل ذخیره کنم

jeson_park
پنج شنبه 10 آذر 1390, 17:45 عصر
سلام
ببنید این به دردتون می خوره یا نه؟
یه مثال کامل هست

#include <stdio.h>
#include <stdlib.h>
struct comp
{
int code;
char name[27];
char des[102];
int disp;
struct comp *n;
};

struct comp *comps = 0;

void apri()
{
char *path = malloc(sizeof(char) * 256);
int ch, i = 0;
FILE *fr;
struct comp *nn = calloc(1, sizeof(struct comp)), *p = 0;

fputs("\nInserisci il percorso e il nome del file: ", stderr);

fflush(stdin);
while((ch = getc(stdin)) != '\n' && i < 256)
{
path[i++] = ch;
}
path[i] = '\0';

if((fr = fopen(path, "rb")) != NULL)
{
comps = nn;

//----------------------------------------------------------------- prima struttura
fread(&nn->code, sizeof(int), 1, fr);

i = 0;
ch = getc(fr);
do
{
nn->name[i++] = ch;
ch = getc(fr);
}
while(ch != '\0');

i = 0;
ch = getc(fr);
do
{
nn->des[i++] = ch;
ch = getc(fr);
}
while(ch != '\0');

fread(&nn->disp, sizeof(int), 1, fr);

getc(fr);

p = nn;
nn = calloc(1, sizeof(struct comp));
//----------------------------------------------------------------- fine prima struttura

while((ch = getc(fr)) && (!feof(fr)) && ungetc(ch, fr))
{
fread(&nn->code, sizeof(int), 1, fr);

i = 0;
ch = getc(fr);
do
{
nn->name[i++] = ch;
ch = getc(fr);
}
while(ch != '\0');

i = 0;
ch = getc(fr);
do
{
nn->des[i++] = ch;
ch = getc(fr);
}
while(ch != '\0');

fread(&nn->disp, sizeof(int), 1, fr);

getc(fr);

p->n = nn;
p = nn;
nn = calloc(1, sizeof(struct comp));
}
p->n = 0;
}

fclose(fr);
free(path);
free(nn);
}

void salva()
{
char *path = malloc(sizeof(char) * 256);
int ch, i = 0;
FILE *fw;
struct comp *p;

fputs("\nInserisci il percorso e il nome del file: ", stderr);

fflush(stdin);
while((ch = getc(stdin)) != '\n' && i < 256)
{
path[i++] = ch;
}
path[i] = '\0';

if((fw = fopen(path, "wb")) != NULL)
{
for(p = comps; p; p = p->n)
{
fwrite(&p->code, sizeof(int), 1, fw);
fwrite(p->name, sizeof(char), strlen(p->name), fw);
fputc('\0', fw);
fwrite(p->des, sizeof(char), strlen(p->des), fw);
fputc('\0', fw);
fwrite(&p->disp, sizeof(int), 1, fw);
fputc('\n', fw);
}
}

fclose(fw);
free(path);
}