Dateigröße in Byte auslesen



  • Hallo,

    schaut euch mal die beiden Routinen an, und sagt mir wo der Fehler liegt.

    Bei der ersten Routine kommt eine Dateigröße von 6304676 Byte heraus.
    Legende:
    asSuchString = c:\Musterpfad\.
    asQuellFile = Musterdatei.txt

    AnsiString PfadName;
                    Quelle = asSuchString;
                    PfadName = asQuellFile;
                    char *ch2 = new char [PfadName.Length() + 1];
                    strcpy(ch2, PfadName.c_str());
                    int handle1 = open(ch2, O_CREAT);
                    DateiGroesse = filelength(handle1);
                    delete [] ch2;
                    close(handle1);
    

    Bei der zweiten Routine kommt eine Dateigröße von 3081488 Byte heraus.

    char *ch1 = new char [asQuellFile.Length() +1];
                  strcpy(ch1, asQuellFile.c_str());
                  int handle = FileOpen(ch1, fmOpenRead);
                  int iFileLength = FileSeek(handle,0,2);
                  delete [] ch1;
                  FileClose (handle);
    

    Die eigentliche Dateigröße liegt aber bei 130000 Byte.

    mfg



  • Hallo

    Benutze die WinAPI-Funktion GetFileSize

    bis bald
    akari



  • Hallo,
    da mein Projekt in ferner Zukunft evtl. auch auf Linux laufen soll, möchte ich nach Möglichkeit neutral bleiben. (also keine WINAPI-Funktion)
    Gigt es hier auch Möglichkeiten ??

    mfg
    Traugott



  • Hallo

    da mein Projekt in ferner Zukunft evtl. auch auf Linux laufen soll

    Und arbeitest du mit dem Builder? Hoffentlich reine Konsole ohne VCL...

    Ansonsten schau im C++ Forum nach, da kannst du std::ifstream oder gar boost::filesystem anstelle der alten C-Sachen benutzen.

    bis bald
    akari



  • Hallo,

    mit fstream

    #include <fstream>
    
    std::ifstream ein("datei", std::ios::binary);
    ein.seekg(0, std::ios::end);
    unsigned int size = ein.tellg();
    

    Hier wäre nach erzeugen von ein noch eine Abfrage ob die Datei geöffnet werden konnte angebracht.
    mit boost::filesystem

    #include <boost/filesystem/operations.hpp>
    
    namespace fs = boost::filesystem;
    
    unsigned int size = fs::file_size( fs::path("datei", fs::native) );
    

    Bei der boost-Variant sollten noch try/catch drum gemacht werden, da hier bei Dateizugriffsfehler Exceptions geworfen werden.


Anmelden zum Antworten