Почему os.path.getsize () возвращает отрицательное число для файла 10 ГБ? - PullRequest
7 голосов
/ 02 марта 2011

Я использую функцию os.path.getsize(), которая дает размер файла в байтах.

Поскольку мой размер файла составляет 10 ГБ, он дает мне отрицательный размер (в байтах).

так кто-нибудь может дать мне какое-либо представление, почему это произошло?

Это мой код:

import os
ospathsize = os.path.getsize('/home/user/Desktop/test1.nrg')
print (ospathsize) 

Ответы [ 2 ]

10 голосов
/ 02 марта 2011

Очевидно, что ваше ядро ​​Linux имеет поддержку больших файлов, поскольку ls -l работает правильно. Таким образом, вашей установке Python не хватает поддержки. (Вы используете пакет Python своего дистрибутива? Какой это дистрибутив?)

В документации по поддержке больших файлов POSIX в Python говорится, что Python обычно должен использовать поддержку больших файлов, если она доступна в Linux. Также предлагается попробовать настроить Python с помощью командной строки

CFLAGS='-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64' OPT="-g -O2 $CFLAGS" \
    ./configure

И, наконец, цитирование справочной страницы системного вызова stat :

Это может произойти, когда приложение, скомпилированное на 32-разрядной платформе без -D_FILE_OFFSET_BITS=64, вызывает stat() для файла, размер которого превышает (1<<31)-1 бит.

(я считаю, что последнее слово должно быть "байтами".)

1 голос
/ 02 марта 2011

Похоже, переполнение 32-битного int используется для размера, который ограничен 4 ГБ.Это может быть ошибка (или даже отсутствующий флаг компиляции) в вашей конкретной версии Python.Я только что попробовал это в 32-битной системе Linux, используя Python 2.4 и 2.6;оба дают правильные результаты для файлов размером более 4 ГБ.

Попробуйте обновить Python;исправление, вероятно, является минорной версией.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...