Länge einer TextDatei ermitteln.



  • Hi,

    ich möchte nachdem ich eine Txt Datei geöffnet habe

    f.open("TestText.txt",ios::in);
    

    deren länge (in Zeile und in Byte) ermitteln.
    Kann mir jemand weiterhelfen und sagen wie das funktioniert !

    Danke für eure Mühe
    ShadowEater



  • Hallo ShadowEater,

    ich schätze du meinst sowas:

    #include <iostream> 
    #include <fstream> 
    using namespace std; 
    
    int main() 
    { 
        char a; 
        ifstream File; 
        File.open("/test.txt", ios::in); 
        File.seekg(0, ios::end);
        cout << File.tellg(); 
        return 0; 
    }
    

    Gruß,
    CSpille



  • Danke CSpille,

    funktioniert, mittlerweile hab ichs mit sizeof() versucht und as klappt auch (gibt die Anzahl der Zeilen zurück) !

    Gruß
    ShadowEater :xmas1:



  • ShadowEater schrieb:

    mittlerweile hab ichs mit sizeof() versucht und as klappt auch (gibt die Anzahl der Zeilen zurück) !

    Das kann eigentlich nicht sein.. Ist vielleicht nur Zufall, füg mal in der Textdatei eine Zeile hinzu, dann müsste es damit vorbei sein. sizeof() gibt nur die Größe des Parameters in Bytes zurück (also die Größe der Klasse ifstream).
    Die Zeilen-Anzahl zu ermitteln, ist nicht so einfach. Der Text wird ja Byte für Byte gespeichert, ein "Zeilenvorschub" ist dabei auch nur ein Byte (bzw jeweils mehrere Bytes, je nach Textformatierung). D.h. du musst quasi die komplette Textdatei durchgehen und die Zeilenvorschübe zählen. Das geht zwar recht komfortabel mit den streams (getline), du kommst aber nicht drumherum, die ganze Datei durchzugehen.



  • Hi, wenn man die '\n' zählt weiß man doch wie viele Zeilen man geschrieben hat oder ned ?????

    Kann mir jemand erklären was < >.tellg();
    und < >.seekg( , );

    macht???

    Danke schon mal



  • OK hat sich erledigt, selbst nachsehen is auch ned verkehrt : )



  • Hi,

    stimmt war Zufall ;(( !
    Ich steh grad aufm Schlauch, habt Ihrr vllt. ein Codesnippet wie ich richtig mache ?
    Tellg() und Seekg() ????

    Danke für eure Mühe
    ShadowEater



  • Wo ist da das Problem? Es kommt darauf an wo du die Datei öffnest (also mit std::ios_base::app oder ohne 😉 ). Ohne musst du erstmal noch ans ende gehen(seekg) und dann die Position abrufen(tellg)

    So in etwa kannst du es machen, ohne das du dich um die Position kümmern musst:

    std::streamsize filesizeg(std::ifstream& stream)
    {
    	const std::ifstream::pos_type old_pos(stream.tellg());
    	stream.seekg(0, std::ios_base::beg);
    	std::ifstream::pos_type pos(stream.tellg());
    	stream.seekg(0, std::ios_base::end);
    	pos = stream.tellg() - pos;
    	stream.seekg(old_pos, std::ios_base::beg);
    	return static_cast<std::streamsize>(pos);
    }
    

    ...


Anmelden zum Antworten