Как проверить доступное свободное место в Haxe?
Я не нахожу способ проверить свободное место, доступное на устройстве, используя Haxe, Openfl, Lime или другую библиотеку. Я хотел бы избежать загрузки данных, которые будут превышать размер, рекомендуемый для приложения на каждом устройстве. Что вы делаете, чтобы проверить это?
1 ответ
Попробуйте создать файл такого размера! Затем либо удалите его, либо снова откройте и напишите (а не добавьте) его содержимое.
Я не знаю, будут ли все платформы, поддерживаемые Haxe, работать нормально с этим приемом, но, как сообщается, этот алгоритм работает во многих местах и на разных языках (я лично тестировал его в Ruby и видел то же самое предложение для C++ /.NET). Чтобы проверить, доступны ли X байтов дискового пространства:
open
новый файл для записиseek
X-1 байт от началаwrite
байт данных (все, что вы хотите,0
,42
...)close
файл (возможно, не связанный с поставленной задачей, но все равно не забудьте сделать это)
Если на диске недостаточно места, вы, вероятно, получите исключение в какой-то момент этого алгоритма. Вам нужно будет выяснить, какие ошибки ожидать, и правильно их обработать.
С помощью ihx
Я обнаружил, что это работает и не требует ничего, кроме стандартной библиотеки Haxe:
haxe interactive shell v0.3.4
type "help" for help
>> import sys.io.*;
>> var f = File.write('loca', true)
sys.io.FileOutput : { __f => #abstract }
>> f.seek(39999, FileSeek.SeekBegin)
Void : null
>> f.writeByte(0)
Void : null
>> f.close()
Void : null
После этих манипуляций у меня был файл с именем loca
ровно 40000 байт в моем рабочем каталоге.
Кстати, будьте осторожны, когда делаете такие вещи в ihx
так как он перезапускает весь сеанс с последней добавленной строкой каждый раз.
Продолжающиеся эксперименты:
Тем не менее, когда недостаточно места на диске, он не может выйти из строя с ошибками. В этом случае вам нужно проверить реальный размер с sys.FileSystem.stat(path).size
, И не забудьте удалить файл, если не хватает места.