Dateigröße ermitteln?



  • Hi,

    #include <fstream>
    #include <string>
    
    std::fstream::pos_type get_filesize(std::string const & filename )
    {
      std::ifstream in(filename.c_str())
      if(!in) return 0;
      in.seekg(std::ios::end,0);
      return in.tellg();
    }
    


  • Hups, ich hätte wohl sagen sollen, dass ich mit Borland auf grafischer basis arbeite. 🙄 Das erste Beispiel kapiere ich ausserdem nicht.



  • The Knight schrieb:

    Hups, ich hätte wohl sagen sollen, dass ich mit Borland auf grafischer basis arbeite. 🙄 Das erste Beispiel kapiere ich ausserdem nicht.

    komisch: habe in C++ noch _nie_ eine grafik gesehen, aber man lernt ja bekanntlich nie aus 🙄

    ->funktioniert bis zu einer dateigröße von 4 GB (UINT)

    unsigned int getFileSize(const char *file_name)
    {
        ifstream file(file_name);
        file.seekg(0,std::ios::end);
        return file.tellg();
    }
    

    und was ist daran nicht zu verstehen? hier der aufruf der funktion:

    cout << getFileSize("dieDatei.txt") << " Bytes" << endl;
    

    jetzt verständlich genug?



  • enno-tyrant schrieb:

    und was ist daran nicht zu verstehen? hier der aufruf der funktion:

    cout << getFileSize("dieDatei.txt") << " Bytes" << endl;
    

    jetzt verständlich genug?

    Ich glaube das er von deinem gepostetem "code" spricht und net von meinem 🤡

    enno-tyrant schrieb:

    die forensuche hätte dir das gezeigt:

    int stat(char *file_name, struct stat *buf); 
    int fstat(char *filedescriptor, struct stat *buf); 
    
    in dem struct buf gibt es dann die größe in Bytes 
    
    struct stat 
    { 
    (...) 
    off_t st_size; 
    (...) 
    }
    


  • ahso, das ist nicht meiner -> ich schrieb ja auch _diesen_ hätte er mindestens gefunden wenn er die forensuche benutzt hätte



  • Grafisch = mit Steuerelementen, ein Win32 Programm und all das.

    Und nein, antürlich ging es nicht. Nur Fehlermeldungen. 😞



  • The Knight schrieb:

    Grafisch = mit Steuerelementen, ein Win32 Programm und all das.
    (

    Wenn du eh ein Win32-Programm schreibst, warum dann nicht einfach GetFileSize aus der WinAPI verwenden?



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.





  • Ich arbeite mit Borland. Das ist eine Anwendung. Eure Codeschnippsel funktionieren da nicht und GetFilesize scheint da gar nicht bekannt zu sein, jedenfalls gibt die Hilfe keine Infos dazu aus.
    Was habt ihr noch für Vorschläge?



  • Die Vorschläge sind schon in Ordnung. Das Problem ist nur das du keine Ahnung von C++ hast. 😃



  • schonmal was von headern gehört? *g*



  • Schon mal daran gedacht, dass ich ein blutiger Anfänger bin??? Und ja habe ich, aber...



  • Ich habe dir ein Link gegeben, hast du dir diesen Angeschaut??
    am ende dieser Seite steht bei, welcher Header mit included werden muß,
    um die Funktion zu benutzen.
    Auch ein Anfänger sollte logisch denken und lesen, wenn er das nicht kann, kann er nicht Programmieren lernen und wird wohl nur proggen



  • Und wenn ich mit Borland die Anzahl der zeichen/Bytes aus dem RichEdit-Feld auslesen lasse, würde das die genau Größe der datei auch wiedergeben? Ich meine Byte ist byte ist Byte oder wäre das ERgebnis der Zeichen-Zählung anders als die tatsächliche Größe der Datei?



  • Ausprobieren und gut is.



  • int file,size;
    file = open("dein File", O_CREAT);
    size=filelength(file);
    close(file);
    

    Das geht 100%. Ich habe diese Routine immer benutzt.
    Die Methode mit fstream und tellg, finde ich persönlich grössten Müll.
    Habe da nicht immer genaue Werte bekommen.



  • Das Problem ist das "The Knight" nicht programmiert sondern proggen tut, dabei alles per drug´n drob auf eine form zieht beim BCB.
    Ich sage ja immer, BCB ist gift um programmieren zu lernen, zum proggen reichts.

    @The knight
    - Alles was dein BCB macht, kannst du auch alleine.
    - ALLES, egal was es ist hat ein Handle, so eine Art Personalnummer, egal ob Datei oder fenster, Button, Richedit etc.
    - Um mit einer Datei arbeiten zu können, bzw. auf sie zugreifen zu können, brauchst du dazu ein Handle.
    - Dieses Handle kannst du z.B. mit CreateFile() erhlten.
    - mit diesem Handle kannst du dann durch GetFileSize() die Größe einlesen.
    - nicht vergessen das Handle nach Benutzung wieder zu schließen mit CloseHandle()

    wenn du jetzt immer noch nicht klar kommst mit so vielen Beispielen, ob WinAPI basierend oder auf andere Art, dann lerne erst mal programmieren, anstelle von BCB rumklicken!



  • Ich habe die Variablendeklaration ganz oben in die cpp geschrieben und

    file = open("Textdatei",0_CREAT);
    size = filelength(file);
    close(file);

    in OnChange des RichEdits. Das kommt dann als fehlermeldung raus:

    Erzeugen
    [C++ Fehler] PTexteditor.cpp(136): E2015 Mehrdeutigkeit zwischen 'file' und 'System::file'
    [C++ Fehler] PTexteditor.cpp(136): E2121 ) fehlt beim Funktionsaufruf
    [C++ Fehler] PTexteditor.cpp(137): E2268 Aufruf der undefinierten Funktion 'filelength'
    [C++ Fehler] PTexteditor.cpp(137): E2015 Mehrdeutigkeit zwischen 'file' und 'System::file'
    [C++ Fehler] PTexteditor.cpp(137): E2034 Konvertierung von 'int' nach 'TAction *' nicht möglich
    [C++ Fehler] PTexteditor.cpp(138): E2268 Aufruf der undefinierten Funktion 'close'
    [C++ Fehler] PTexteditor.cpp(138): E2015 Mehrdeutigkeit zwischen 'file' und 'System::file'

    Was habe ich falsch gemacht?



  • Was ist bei dir eine Datei?
    Bestimmt keine VCL Komponente.
    Um die Size deiner RichEdit Komponente zu kriegen, solltest du mal die Properties dazu anschauen.


Anmelden zum Antworten