Люди никогда не достигнут совершенства, пока будут оставаться людьми...
Люди добрые, подскажите такую вещь.... Оч нужно в С/С++ выяснить размер файла.
Технологии seek() и всё такое отваливаются при файлах больше чем 2^32.
Удалось найти способ такой:
но он работает только в VS. Подскажите какой нибудь-метод, который бы был POSIX.
Технологии seek() и всё такое отваливаются при файлах больше чем 2^32.
Удалось найти способ такой:
_filelengthi64(fileno(fopen("filename", "rb")));
но он работает только в VS. Подскажите какой нибудь-метод, который бы был POSIX.
В гугле зобанили?)
А теперь если ВЫ внимательно вчитаетесь в вопрос, там будет написано, в чём проблема. все эти мегаспособы выдают 0 на БОЛЬШИХ файлах.
fstat
Небольшая иллюстрация использования всех этих функций и разницы в результатах. Cygwin-gcc это кушает, MinGW-gcc - нет (ругается на fseeko/ftello, и вообще у него off_t не long long, а просто long, так что и fstat не прокатит =\ Хотя, скорее всего это где-то должно подкручиваться), как там у gcc на *NIX'ах и у MSVS'овского компилятора - не знаю.
===
===
>sys
а оно разве не ланакци\юних онли?
вообще похоже самый простой вариант оба способа запихать в функцию-макрос на ifdef'ах, которая будет выбирать нужный вариант под платформу. если религия позволяет. кеке
Кстати:
Function
Required header
Compatibility
_fstat
<sys/stat.h> and <sys/types.h>
Windows 95, Windows 98, Windows 98 Second Edition, Windows Millennium Edition, Windows NT 4.0, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003
_fstat32
<sys/stat.h> and <sys/types.h>
Windows 95, Windows 98, Windows 98 Second Edition, Windows Millennium Edition, Windows NT 4.0, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003
_fstat64
<sys/stat.h> and <sys/types.h>
Windows 95, Windows 98, Windows 98 Second Edition, Windows Millennium Edition, Windows NT 4.0, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003
_fstati64
<sys/stat.h> and <sys/types.h>
Windows 95, Windows 98, Windows 98 Second Edition, Windows Millennium Edition, Windows NT 4.0, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003
_fstat32i64
<sys/stat.h> and <sys/types.h>
Windows 95, Windows 98, Windows 98 Second Edition, Windows Millennium Edition, Windows NT 4.0, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003
_fstat64i32
<sys/stat.h> and <sys/types.h>
Windows 95, Windows 98, Windows 98 Second Edition, Windows Millennium Edition, Windows NT 4.0, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003
Источник: msdn.microsoft.com/en-us/library/221w8e43%28VS....