Wie kann ich die Dateigröße in C ++ ermitteln?

Lassen Sie uns eine ergänzende Frage zu diesem Thema stellen . Was ist der gängigste Weg, um die Dateigröße in C ++ zu erhalten? Stellen Sie vor dem Beantworten sicher, dass es portabel ist (kann unter Unix, Mac und Windows ausgeführt werden), zuverlässig, einfach zu verstehen und ohne Bibliotheksabhängigkeiten (kein Boost oder qt, aber zum Beispiel glib ist ok, da es eine portable Bibliothek ist).

     #include  std::ifstream::pos_type filesize(const char* filename) { std::ifstream in(filename, std::ifstream::ate | std::ifstream::binary); return in.tellg(); } 

    Weitere Informationen zu Dateien in C ++ finden Sie unter http://www.cplusplus.com/doc/tutorial/files/ .

    Obwohl nicht unbedingt die beliebteste Methode, habe ich gehört, dass die Methode ftell, fseek unter Umständen nicht immer genaue Ergebnisse liefert. Genauer gesagt, wenn eine bereits geöffnete Datei verwendet wird und die Größe dafür berechnet werden muss und sie zufällig als Textdatei geöffnet wird, wird sie falsche Antworten geben.

    Die folgenden Methoden sollten immer funktionieren, da stat Teil der c-Laufzeitbibliothek unter Windows, Mac und Linux ist.

     long GetFileSize(std::string filename) { struct stat stat_buf; int rc = stat(filename.c_str(), &stat_buf); return rc == 0 ? stat_buf.st_size : -1; } or long FdGetFileSize(int fd) { struct stat stat_buf; int rc = fstat(fd, &stat_buf); return rc == 0 ? stat_buf.st_size : -1; } 

    Auf einigen Systemen gibt es auch einen stat64 / fstat64. Also, wenn Sie dies für sehr große Dateien benötigen, können Sie diese verwenden möchten.

    Es ist auch möglich, dies mit der function fopen (), fseek () und ftell () herauszufinden.

     int get_file_size(std::string filename) // path to file { FILE *p_file = NULL; p_file = fopen(filename.c_str(),"rb"); fseek(p_file,0,SEEK_END); int size = ftell(p_file); fclose(p_file); return size; } 

    Verwenden des C ++ Dateisystem TS:

     #include  namespace fs = std::experimental::filesystem; int main(int argc, char *argv[]) { fs::path p{argv[1]}; p = fs::canonical(p); std::cout < < "The size of " << p.u8string() << " is " << fs::file_size(p) << " bytes.\n"; } 
     #include  int main() { FILE *f; f = fopen("mainfinal.c" , "r"); fseek(f, 0, SEEK_END); unsigned long len = (unsigned long)ftell(f); printf("%ld\n", len); fclose(f); } 

    In C ++ können Sie folgende function verwenden, es wird die Größe Ihrer Datei in Bytes zurückgeben.

     #include  int fileSize(const char *add){ ifstream mySource; mySource.open(add, ios_base::binary); mySource.seekg(0,ios_base::end); int size = mySource.tellg(); mySource.close(); return size; } 

    Der folgende Codeausschnitt adressiert genau die Frage in diesem Post 🙂

     /// /// Get me my file size in bytes (long long to support any file size supported by your OS. /// long long Logger::getFileSize() { std::streampos fsize = 0; std::ifstream myfile ("myfile.txt", ios::in); // File is of type const char* fsize = myfile.tellg(); // The file pointer is currently at the beginning myfile.seekg(0, ios::end); // Place the file pointer at the end of file fsize = myfile.tellg() - fsize; myfile.close(); static_assert(sizeof(fsize) >= sizeof(long long), "Oops."); cout < < "size is: " << fsize << " bytes.\n"; return fsize; }