Toon posts:

[C] ftell geeft geen goede waarde terug

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb het volgende probleem:
ik moet een record in een file updaten.
Dit record is altijd het laatste record in de file.
Wat ik terug krijg met ftell is constant 106.
code:
C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
  htdWeRec.eindtijd = geeftijd();
  if ((fp = fopen("WZH.HTD", "at")) != NULL)
  {
    if (fwrite(&htdWeRec, sizeof(htdWeRec), 1, fp)==0)
    {
        melding(1, "Kan WZH.HTD niet", "wegschrijven!", "");
    }
    else
    {
      fpointer = ftell(fp)-sizeof(htdWeRec);
      clrscrn();
      gotoxy(0, 0);
      printf("%ld\n\r%d\n\r%ld", ftell(fp), sizeof(htdWeRec), fpointer);
      getch();
      fclose(fp);
    }
  }

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-08 13:19

.oisyn

Moderator Devschuur®

Demotivational Speaker

Open 'm eens met "a+" ipv "a"?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Topicstarter
Helaas.....
geen succes :(
Ik heb nu anders opgelost, iets minder net maar het moet maar:
C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
  if ((fp2 = fopen("WZH.HTD", "r+t")) != NULL)
  {
    if (fseek(fp2,0L,SEEK_END)!=0)
    {
      melding(1, "Kan WZH.HTD", "niet bewerken!", "foutcode 1a");
      return FALSE;
    }
    if(fseek(fp2,-((long)sizeof(htdWeRec)),SEEK_CUR)!=0)
    {
      melding(1, "Kan WZH.HTD", "niet bewerken!", "foutcode 1b");
    }
    else
    {
      if(fread(&htdWeRec, sizeof(htdWeRec), 1, fp2)!=0)
      {
        htdWeRec.eindtijd = geeftijd();
      }
      else
      {
        melding(1, "Kan WZH.HTD", "niet bewerken!", "foutcode 2");
      }
      if (fseek(fp2,0L,SEEK_END)!=0)
      {
        melding(1, "Kan WZH.HTD", "niet bewerken!", "foutcode 3a");
        return FALSE;
      }
      if(fseek(fp2,-((long)sizeof(htdWeRec)),SEEK_CUR)!=0)
      {
        melding(1, "Kan WZH.HTD", "niet bewerken!", "foutcode 3b");
      }
      if(fwrite(&htdWeRec, sizeof(htdWeRec), 1, fp2)==0)
      {
        melding(1, "Kan WZH.HTD", "niet wegschrijven!", "foutcode 4");
      }
    }
    fclose(fp2);
  }

Voor de gene die dit btw abacadabra vinden dit is C voor Opticon handterminals.
Ik ben daarom bang dat als ik het wil doen zoals het eerst was, na het appenden een fseek moet geven om naar het eind te gaan. (Het is echt heel krom maar op een normale manier schijnt het niet te lukken met opticon.