C/C++ FAQ

Fstream - rozmiar pliku

marcinEc
<keywords>fstream ifstream rozmiar pliku</keywords>

Pobranie długości pliku związanego ze strumieniem <font name="Courier New">fstream</span> (także <font name="Courier New">ifstream</span>) polega na przesunięciu wskaźnika odczytu (tzw. get pointer) na koniec pliku, w trybie binarnym, i odczytaniu tej pozycji:

#include < iostream >
#include < fstream >
using namespace std;
int main () 
{
  int length;
 
  fstream fs;
  fs.open( "test.txt", ios::binary | ios::in );
  if ( fs )
  {
    // przesun pozycje na koniec
    fs.seekg( 0, ios::end );
    // odczytaj pozycje w pliku -> rozmiar pliku
    length = fs.tellg();
    // wroc na poczatek pliku!
    fs.seekg( 0, ios::beg );
 
    // ...
    cout << "Rozmiar pliku to: " << length << endl;
  }
}

Można także użyć wskaźnika zapisu (put pointer) i skorzystać z metod <font name="Courier New">seekp()</span> oraz <font name="Courier New">tellp()</span> dla strumienia otwartego do zapisu, np. typu <font name="Courier New">ofstream</span>; należy tylko uważać, aby nie skasować zawartości pliku, gdyż domyślnie <font name="Courier New">ofstream</span> jest otwierany z flagą <font name="Courier New">ios::trunc</span>.

Happy coding!

FAQ

3 komentarzy

A mnie się zawsze miliły kierunki w seeku :D... Thx.

to będzie działało tylko z plikami < 2 GB
żeby to zmienić, zmień deklarację int length na unsigned length

jak dla mnie to sztos !!!