Zanim ktoś skarży się na „duplikat”, byłem dość dokładnie sprawdzanie SO, ale nie wydaje się być jeszcze nie czysty odpowiedź, chociaż sprawa wygląda całkiem proste.Get duży rozmiar pliku w C
Szukam przenośnego kodu C, który jest w stanie dostarczyć rozmiar pliku, nawet jeśli taki plik jest większy niż 4 GB.
Zwykła metoda (fseek, ftell) działa dobrze, tak długo, jak plik pozostaje < 2GB. Jest dość dobrze obsługiwany wszędzie, więc staram się znaleźć coś podobnego.
Niestety, zaktualizowane metody (fseeko, ftello) nie są obsługiwane przez wszystkie kompilatory. Na przykład MinGW tęskni za nią (i oczywiście MSVC). Ponadto, niektóre komentarze sprawiają, że wierzę, że nowy typ zwrotu (off_t) niekoniecznie obsługuje rozmiar> 2 GB, może być zależny od niektórych parametrów zewnętrznych, które należy sprawdzić.
Metody jednoznaczne (fseeko64, ftello64) nie są obsługiwane przez MSVC. MS dostarcza ich odpowiednik, _fseeki64 & _ftelli64. To już jest złe, ale staje się gorsze: niektóre konfiguracje Linuksa wydają się źle obsługiwać te funkcje podczas pracy. Na przykład mój Debian Squeeze na PowerPC, używając GCC 4.4, będzie produkował metodę "filesize" za pomocą fseeko64, która zawsze zwraca 0 (gdy działa dobrze dla Ubuntu64). MinGW wydaje się odpowiadać na losowe śmieci powyżej 2GB.
Cóż, jestem trochę pojęcia miarę przenoszenia jest zaniepokojony. A jeśli potrzebuję zrobić garść #if #else, to dlaczego nie pójść od razu do metod specyficznych dla kompilatorów OS &, na przykład GetFileSize() dla MSVC.
Jaka jest Twoja definicja "przenośnego"? Istnieje wiele systemów, które nie mogą nawet otwierać plików. Jeszcze więcej nie może otworzyć plików o rozmiarze ponad 4 GB. –