ftell fseek
Kim Shearer
kim at bilby.cs.uwa.oz.au
Wed Dec 12 19:33:33 AEST 1990
I have been trying to come to terms with file processing in C.
After reading the manuals etc... I have still not solved my problem
What I am trying to do is read %s %d pairs from a file, and update
the %d part if the %s matches a certain value. To do this I use
ftell to keep track of where I wish to put the number.
I realise that if things arn't the same size.... but the big problem is
this :
the ftell returns 3 (see example file below) and is stored
in a long, yet the fseek imediately following resets the
file to the start. I even read the fine print sating that in
an update opened file you must seperate in and out operations
by resets or fseeks.
If anyone can tell me what is wrong or that this is incorrect use
of the "r+" opened file and why, I would be very grateful.
EXAMPLE FILE
-----------------
bob 2
fred 2
-----------------
CODE
-----------------
#include <stdio.h>
#define MAX_NAMELEN 64
int my_index, my_ndepts = 0;
FILE *my_file_p;
main ()
{
int dept_no, hours_wrkd, i, old_hours, i_own_it = 0;
char update_name[MAX_NAMELEN], name[MAX_NAMELEN];
char filename[MAX_NAMELEN];
int err_ret;
long marker;
sprintf (filename, "department%d", 2);
my_file_p = fopen (filename, "r+");
if (my_file_p == NULL) {
printf (" %d could not open file %s\n", my_index, filename);
perror (filename);
exit (0);
}
fseek (my_file_p, 0L, 0);
while (fscanf (my_file_p, "%s", name) == 1) {
marker = ftell (my_file_p);
fscanf (my_file_p, "%d", &old_hours);
if (strcmp ("bob", name) == 0) {
err_ret = fseek (my_file_p, marker, 0);
printf (" fseek returns : %d\n", err_ret);
fprintf (my_file_p[i], " %d", old_hours + hours_wrkd);
err_ret = fseek (my_file_p, marker, 0);
fscanf (my_file_p[i], "%d", &old_hours);
}
}
}
More information about the Comp.lang.c
mailing list