/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
Bech_bb 500
kyllekylle 500
jdjespers.. 500
gibson 300
scootergr.. 300
molokyle 287
10  strarup 270
Hvorfor kan jeg ikke få fseek() til at vir~
Fra : Bertel Lund Hansen


Dato : 07-04-08 17:02

Hej alle

Jeg har lavet noget testkode for at undersøge et problem jeg har.
Det egentlige problem er at jeg har to sammenhørende filer, den
ene med numeriske data, og den anden er en tekstfil med nogle
filnavne adskilt af linjeskift.

I datafilen opsamler jeg bl.a. datpos der angiver hvor i
tekstfilen det tilsvarende filnavn begynder. Jeg bruger fseek()
til at springe dertil, men både i mit originale program og i
testprogrammet returnerer den -1 (fejl) og virker forkert.

Her er testkoden hvor jeg bruger et tilfældigt tal som datpos og
10 som fast længde på filnavnet (det varierer i originalen). Hvis
I vil afprøve det, kan i bare indsætte stien til en vilkårlig
tekstfil som I har.

char gruppenavn[200];
FILE *grupper;
int datpos;

int main () {
   int result;

   grupper=fopen("G:/AgentTest/Stofanet/groups.dat","r");
   do {
      datpos=rand();
      result=fseek(grupper,0,datpos);
      fgets(gruppenavn,10,grupper);
      printf("%4d %s\n",result,gruppenavn);
   } while (getch()!=27);
   fclose(grupper);

   return 0;
}

PS. Det *er* tekstfilen jeg bruger selv om endelsen er .dat.

--
Bertel
http://bertel.lundhansen.dk/   FIDUSO: http://fiduso.dk/

 
 
Kent Friis (07-04-2008)
Kommentar
Fra : Kent Friis


Dato : 07-04-08 18:22

Den Mon, 07 Apr 2008 18:01:41 +0200 skrev Bertel Lund Hansen:
>
>       result=fseek(grupper,0,datpos);

int fseek( FILE *stream, long offset, int whence);

DESCRIPTION
The fseek function sets the file position indicator for
the stream pointed to by stream. The new position, mea­
sured in bytes, is obtained by adding offset bytes to the
position specified by whence. If whence is set to
SEEK_SET, SEEK_CUR, or SEEK_END, the offset is relative to
the start of the file, the current position indicator, or
end-of-file, respectively. A successful call to the fseek
function clears the end-of-file indicator for the stream
and undoes any effects of the ungetc(3) function on the
same stream.

Altså:

result=fseek(grupper,datpos,SEEK_SET);

Mvh
Kent
--
"So there I was surrounded by all these scary creatures
They were even scarier than what Microsoft call features"
- C64Mafia: Forbidden Forest (Don't Go Walking Slow).

Bertel Lund Hansen (07-04-2008)
Kommentar
Fra : Bertel Lund Hansen


Dato : 07-04-08 19:22

Kent Friis skrev:

> >       result=fseek(grupper,0,datpos);
> int fseek( FILE *stream, long offset, int whence);

I 'bibelen' står der

   int fseek( FILE *stream, long offset, int origin);

Jeg havde bare opfattet de to ord modsat af det rigtige. Tak for
hjælpen.

--
Bertel
http://bertel.lundhansen.dk/   FIDUSO: http://fiduso.dk/

Søg
Reklame
Statistik
Spørgsmål : 177554
Tips : 31968
Nyheder : 719565
Indlæg : 6408857
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste