如何查看 Haxe 中的可用空间?
Posted
技术标签:
【中文标题】如何查看 Haxe 中的可用空间?【英文标题】:How to check the available free space in Haxe? 【发布时间】:2015-12-24 03:32:00 【问题描述】:我找不到使用 Haxe、Openfl、Lime 或其他库检查设备中可用空间的方法。 我想避免下载数据超过每个设备中为应用程序推荐的大小。 你会做什么检查?
【问题讨论】:
您的目标是哪些平台? ios 和 android 都有用于查询可用空间的 API,大多数其他设备也是如此。如果跨平台的 openfl/lime 扩展不存在,最好的解决方案是自己编写一个。在极少数情况下,您还可以直接调用本机 API。 【参考方案1】:尝试创建一个该大小的文件!然后删除它或重新打开并在其内容上写入(而不是附加)。
我不知道 Haxe 支持的所有平台是否都能很好地使用这个技巧,但是据报道这个算法可以在许多地方和语言中工作(我亲自在 Ruby 中测试过它并看到了the same suggestion for 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
检查实际尺寸。如果没有足够的空间,不要忘记删除文件。
【讨论】:
如果您有一种情况可能会用完空间,那么创建大文件只是为了弄清楚您可以实际使用多少空间似乎不太合理。至少,为什么这比只保存你需要保存的东西并希望最好的东西更好? @jonasmalacofilho 因为设备上还没有“你需要保存的任何东西”,这个过程可能很慢/很昂贵,并且由于磁盘空间不足而静默失败。最好预先预留空间,以确保 (a) 有足够的空间 (b) 文件系统中其他地方的其他进程在下载期间不会占用必要的空间。 公平,但这假设您的进程比所有其他进程都更重要,直到它仍应尝试使用所有可用空间并使设备无法使用。 @jonasmalacofilho 我还没有看到很多真正关心的软件。一些操作系统会善意地警告这种总体风险情况,但决定权仍取决于用户。 您好,谢谢您的回答。我必须先下载一组文件才能保存它们。如果设备中没有用于所有文件的空间,我想避免所有过程。如果没有空间我想通知用户让他决定删除一些旧内容以下载新集。有时应用程序需要下载并保存 400MB。在这种情况下我需要写一个 400MB 的文件吗?我认为这不是最佳解决方案。所以如果没有任何扩展,我会尝试@jonasmalacolfilho 的建议。以上是关于如何查看 Haxe 中的可用空间?的主要内容,如果未能解决你的问题,请参考以下文章