Как проверить доступное свободное место в 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, И не забудьте удалить файл, если не хватает места.

Другие вопросы по тегам