# Wie bekomm ich die Dateigröße einer Datei raus ?



## Sneaker (11. März 2003)

Hallo
Hab in der suchfunktion nix gefunden und frage deshalb wie bekomm ich in C++ die dategröße einer datei raus ?
geht das vielleicht irgendwie über fstream ?


----------



## goela (12. März 2003)

Es gibt zwei Möglichkeiten:

Entweder mit

_filelength(int handle); (in Visual C++)
oder mit 
fseek(handle ,0,SEEK_END);

Ersteres ist aber leider kein ANSI-Standard.


----------



## Tobias K. (12. März 2003)

moin

guck dir mal die funktion "GetFileSize" an.


mfg
umbrasaxum


----------



## goela (12. März 2003)

GetFileSize() ist aber MFC!


----------



## Sneaker (12. März 2003)

mein lehrer meint es sollte anders gehen als über fopen und so halt ohne C in C++ halt. ich probier mal fseek aus.


----------



## goela (12. März 2003)

Natürlich kannst Du es ohne fopen machen.
Hier ist ein Beispiel:


```
ULONG laenge_code(const char *pktxt)
{
  ifstream klar( pktxt, ios::binary | ios::in );// dateilänge bestimmen
  if (!klar)                  // datei dazu öffnen
  {
          cerr « "Kann Datei: " « pktxt « " nicht lesen oder finden" « endl;
          return 0;                         // länge 0 ist ein Fehler!!
  }
  char c;
  ULONG laenge = 0;                   // datei bis zu einer länge von 4GByte
  klar.get(c);                        // zeichen ...
  while ( klar.good() )
  {
            ++laenge;                 // zählen
          klar.get(c);
  }
  klar.close();
  return laenge;
}
```

Das Beispiel verwendet die input-stream Klasse und die ist C++

Die Klasse hat ebenfalls ein seek

ofstream.seekp (int streampos);

ofstream.seekp (int streamoff, int seek_dir);

Konstante Bedeutung seek_dir
ios::beg Der Offset wird vom Dateianfang an gemessen. 
ios::cur Der Offset wird von der momentanen Position an gemessen. 
ios::end Der Offset wird vom Dateiende an gemessen.


----------



## Sneaker (13. März 2003)

wenn ich das mit ner schleife mache wird mich mein info lehrer umbringen 
weil ich schreib an einem kompremierungsprogramm und das soll ja gerade schnell gehen und wnen ich dann einmal durch hietze verschwende ich zu viel zeit !
aber das mit seek probier ich mal aus
wenn ihr das noch ein bsischen mit seek spezifizieren könnt ich brauch die seek anweisung um die anzahl der byte herraus zu bekommen die in der datei enthalten sind. müsste das dann ofstream.seekp (0, ios::end); sein um von position 0 bis zum ende der datei die zeichen zu zählen oder ?

edit: hmmm ein fehler hab ich jetzt aber bei mir gibt es kein seekp !

edit: oh das seekp gibs ja nur bei ofstream klasse. aber ich brauch irgend ne methode die resourcenschonend ist und irgendwie ohne gross die zeichen zu zählen und wenns geht in C++ und bitte ohne MFC mein lehrer meinte irgendwas mit Winapp oder so hab ich abe rnicht mehr genau mit bekommen...


----------

