Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Dateigröße ermitteln

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
07.04.2003, 19:05 Uhr
~JustSmile
Gast


Kurze Frage mit der Bitte um eine kurze Antwort:

Wie kann ich die Dateigröße einer geöffneten Datei abfragen? Irgendwo innerhalb der FILE-Struktur gibt es doch ein Element, in dem das drin steht...!?

Vielen Dank!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
07.04.2003, 19:37 Uhr
Alois



In der FILE-Struktur gibt es sowas nicht, aber du kannst die Größe anders ermitteln:


C++:
FILE *Datei;
int Groesse;

Datei = fopen("datei.txt", "rb");
fseek(Datei, 0, SEEK_END);
Groesse = ftell(Datei);
fclose(Datei);


Dieser Post wurde am 07.04.2003 um 19:38 Uhr von Alois editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
07.04.2003, 20:46 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


hallo es geht auch:


C++:
#include <io.h>

FILE *Datei;
long Groesse; // long ist besser

Datei = fopen("datei.txt", "rb");
Groesse = _filelength(_fileno(Datei))
fclose(Datei);



(Achja, _filelength usw sind Compiler spezifisch, das da ist unter VC++ möglich, ich weiss nicht wo noch alles)
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
11.04.2003, 06:08 Uhr
Hans
Library Walker
(Operator)


Falls der Compiler von Borland stammt, unterstützt er bestimmt auch die unter UNIX/Linux übliche stat-Struktur/Funktion.


C++:
#include <sys\stat.h>

struct stat statbuf;
FILE *stream;

/* Öffnen der Datei */
if ((stream = fopen(FILENAME, "rb")) == NULL)
  {
    fprintf(stderr, "Cannot open output file.\n");
    return(1);
  }

/* Einholen von Informationen über die Datei */
stat(FILENAME, &statbuf);

fclose(stream);

/* Anzeigen der Dateilänge */
   printf("Size of file in bytes: %ld\n", statbuf.st_size);



Um die Verwirrung zu vermeiden: Es gibt sowohl eine Funktion Namens stat, als auch eine Struktur, die so heisst. Mit der Funktion stat werden die Daten aus der Struktur abgefragt, bzw. in eine lokale Kopie derselben kopiert.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
04.09.2003, 14:15 Uhr
~schura
Gast



Zitat:
Alois postete
In der FILE-Struktur gibt es sowas nicht, aber du kannst die Größe anders ermitteln:


C++:
FILE *Datei;
int Groesse;

Datei = fopen("datei.txt", "rb");
fseek(Datei, 0, SEEK_END);
Groesse = ftell(Datei);
fclose(Datei);



Ich schreibe eine DOS-Anwendung und möchte innerhalb dieser die Größe einer mit "rb" geöffneten Datei ermitteln. Das Problem ist nur, dass die fseek()-Funktion zwar mit 0 (success) zurückkommt, der Positionszeiger jedoch auf die gleiche Position zeigt wie vorher auch, und nicht, wie erwartet, auf das Ende der Datei.
PS: ich benutze das Visual Studio C++ 1.52

Kann mir jemand vielleicht einen Tipp geben, woran es liegen kann?
Danke
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
04.09.2003, 14:39 Uhr
virtual
Sexiest Bit alive
(Operator)


Bei binären Dateien garantioert der Standard nicht, daß ftell so arbeitet, wie du erwartest (also die Dateigröße zurückgibt). Der einzigst standardkonforme Weg ist tatsächlich der, die Datei bis zum Ende zu lesen, sich die Anzahl der gelesenen Bytes zu merken und dann die Datei zu schließen oder mit rewind an den Anfang der Datei zurück zu kehren.

Alle anderen Lösungen sind nur begrenzt richtig, weil sie eben nur auf bestimmten Platformen oder mit bestimmten Comiplern arbeiten. Wenn Du also nicht den ANSI Weg gehen willst, empfehle ich Dir am ehesten die stat Methode, wie sie Hans vorgeschlagen hat, allerdings kann es sein, daß dein stat eigentlich _stat heißt.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
04.09.2003, 17:49 Uhr
~schura
Gast


2virtual:
Also, bei mir verhält sich die Funktion fseek() sehr komisch. Der Aufruf

C++:
fseek(pFile, 0, SEEK_END);


bewirkt bei mir, dass der Zeiger auf den Dateianfang zeigt, und nicht auf das Ende.


Bearbeitung von loddab:
c++ zu cpp gemacht

Dieser Post wurde am 04.09.2003 um 17:51 Uhr von Loddab editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
05.09.2003, 09:59 Uhr
virtual
Sexiest Bit alive
(Operator)


@schura
Woran machst du fest, daß nach dem seek Du am Anfang der Datei stehst? Am Rückgabewert von ftell? - Das ist kein Beleg, weil ftell wei gesagt keinen garantierten Rückgabewert bei binären Dateien hat.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
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: