Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » ftell gibt 0 zurück, warum?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
26.05.2006, 19:47 Uhr
RedEagle



Je nachdem wie sich der Benutzer entscheidet, soll mein Programm am Ende einer Datei schreiben, oder eine Neue erstellen (bzw alten Inhalt überschreiben).
Das Programm benötigt die Position in der Datei. Deshalb benötige ich, wenn ich Baten an das Ende einer Datei anhänge, die Anzahl der Bytes, die davor stehen (also die Position des Dateiendes).

Das Problem: ftell gibt immer 0 zurück! Warum??

Hier der Code:

C++:
  FILE *imgfile;
  if(opt_add) imgfile = fopen(argv[argument],"ab"); //ans ende der Datei
  else        imgfile = fopen(argv[argument],"wb"); //neue Datei
  if(imgfile==NULL)
  {
   printf("File error: unable to open \"%s\"\n",argv[argument]);
   return 1;
  }
  argument++;
  
  int bytecounter = 0; //Position in der Datei

  if(opt_add)
  {
   bytecounter = ftell(imgfile);  //Position der Bytes
/**/printf("%i\n",bytecounter); //es wird "0" ausgegeben :(
  }

--
MFG RedEagle
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
26.05.2006, 20:10 Uhr
~gast
Gast


Seit wann gibs diese Modi "ab" "wb" ?
Ich kenn nur "a" "a+" usw.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
26.05.2006, 20:17 Uhr
Pablo
Supertux
(Operator)


b steht für binary


Zitat von man 3 fopen:

The mode string can also include the letter ``b'' either as a last character or as a character between the characters in any of the two-character
strings described above. This is strictly for compatibility with ANSI X3.159-1989 (``ANSI C'') and has no effect; the ``b'' is ignored on all
POSIX conforming systems, including Linux. (Other systems may treat text files and binary files differently, and adding the ``b'' may be a good
idea if you do I/O to a binary file and expect that your program may be ported to non-Unix environments.)



--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
27.05.2006, 12:23 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


'a' setzt den "schreibzeiger" ans ende der datei, d.h die position 0 ist EOF, 1 ist EOF+1, 2 ist EOF+2 usw, darum heißt das ja "append".
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
27.05.2006, 12:27 Uhr
RedEagle



Ich habe gedacht/gehofft, das EOF != pos 0 ist, also das ftell den wert vom Anfang bis zum Ende angibt...

Also quasi

Anfang:
pos 0
pos 1
pos 2
pos 3
Ende:

ftell() = 4

Wie bekomme ich dann die Position??
--
MFG RedEagle
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
27.05.2006, 12:44 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


dann musste r+ benutzen, das öffnet lesend und schreibend aber löscht den inhalt nicht, wichtig: ftell gibt 0 zurück und diesmal ists auch 0, d.h der lese/schreibzeiger steht am beginn der datei!
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
27.05.2006, 15:16 Uhr
Oliver
S2-Pixelgeneral


Müsste es nicht auch "%d" statt "%i" heißen ? oO
--
Demokratie ist die Diktatur der Mehrheit.

www.siedler25.org/ ( Siedler2 - Remake )
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
27.05.2006, 15:20 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


ne %i (integer) ist schon legitim, ist das gleiche wie %d (decimal) geben das gleiche aus


MSDN:

%d - int - Signed decimal integer.
%i - int - Signed decimal integer.


--
class God : public ChuckNorris { };

Dieser Post wurde am 27.05.2006 um 15:22 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
28.05.2006, 16:40 Uhr
RedEagle



Danke.

ps.:

%:
%i - Integer (Dezimal)
%d - Dezimal
%u - unsigned integer (Dezimal)
%x - Hex (0..f)
%X - Hex (0..F)

--
MFG RedEagle
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: