2016-11-03 4 views
0

Я использую tellg(), чтобы получить размер некоторых файлов, и для этого проекта очень важно получить реальный/правильный размер файлов. Теперь я немного волнуюсь, потому что прочитал, что tellg() не работает отлично, но он может получить неправильный размер, может быть, больше, чем реальный размер. Например, здесь: tellg() function give wrong size of file?Как я могу получить реальный размер файла с C++?

Как я могу получить правильный размер? или не правда ли, что tellg does'nt работает очень хорошо?

Это мой код с tellg():

streampos begin,end; 
    ifstream file_if(cpd_file, ios::binary); 
    begin = file_if.tellg(); 
    file_if.seekg(0, ios::end); 
    end = file_if.tellg(); 
    file_if.close(); 
    size = end - begin; 
+0

В некоторых операционных системах (в частности, Linux) * другой * процесс может модифицируйте открытый файл, поэтому вопрос может не иметь смысла (другими словами, полученный размер всегда будет приблизительным). –

+0

@BasileStarynkevitch нормально, но я не думаю, что проблема в том, что я нашел в связанном вопросе выше .. нет? – Droide

ответ

3

Чтобы получить размер файла и другой информации, как это создание и время модификации, это владелец, разрешения и т. д. вы можете использовать функцию stat().

#include <sys/types.h> 
#include <sys/stat.h> 
#include <unistd.h> 

struct stat s; 
if (stat("path/to/file.txt", &s)) { 
    // error 
} 

printf("filesize in bytes: %u\n", s.st_size); 

Документация:

3

На данный момент, вы можете использовать boost::filesystem::file_size для получения размера файла.

В ближайшем будущем он будет стандартизован до std::filesystem::file_size, это экспериментальная функция, см. std::experimental::filesystem::file_size.

std::experimental::filesystem::file_size поддерживается:

  • MSVC 2013 или более поздней версии,
  • libstdc++ 5.3 или более поздней версии
  • libc++ 3,8 или более поздней версии