【问题标题】:Is there a way to get available disk space in Silverlight?有没有办法在 Silverlight 中获取可用磁盘空间?
【发布时间】:2012-01-25 04:43:14
【问题描述】:

我目前正在尝试从我的 Silverlight 应用程序中确定可用磁盘空间。

我的应用可以下载大量数据(视频文件),显然,如果磁盘空间不足,这可能会失败。 我知道我可以在写入时捕获异常,但这不会带来非常用户友好的体验,因为信息来得太晚并导致无用的等待。

在常规 .NET 中,我将使用 DriveInfo(请参阅 How do I retrieve disk information in C#? 示例),但该类在 Silverlight 5 中不存在,即使在提升的信任模式下也是如此。

那么,有没有办法在 Silverlight 中确定驱动器上的可用空间?


更新:

  • 我可以要求我的应用程序具有提升的权限。
  • 我也可以使用仅限 Silverlight 5 的解决方案。
  • 我需要在 Windows 和 Mac OS 上都可以运行的东西,所以 PInvoke/COM 互操作不是一个选项。

【问题讨论】:

    标签: silverlight diskspace silverlight-5.0


    【解决方案1】:

    已经有使用 Silverlight 编写的文件浏览器演示,但它们会以更高的信任度运行。

    这意味着您必须让用户在第一次运行您的应用程序时立即对其产生怀疑。

    当用户空间不足时,仅提供措辞恰当的错误消息可能会带来更好的用户体验。

    另一种选择是尝试将隔离存储配额增加最大可用视频的大小。

    http://msdn.microsoft.com/en-us/library/system.io.isolatedstorage.isolatedstoragefile.increasequotato(v=vs.95).aspx

    然后,当失败时,只需让用户知道无法为该应用分配更多空间,因为他可能需要删除较旧的视频。

    【讨论】:

    • 我可以使用提升的信任,我会在我的问题中澄清这一点。
    • IsolatedStorage 配额(遗憾的是)与可用的实际磁盘空间无关,您可以请求任何您想要的配额,它只是用于请求用户写入该数量的权限。
    • 你可以这样做 forums.silverlight.net/t/146323.aspx/1 但它只会是 Windows。查找磁盘空间将仅限于 windows。
    • 我想避免 COM 互操作,我也需要它在 Mac 上工作。
    • 这些天磁盘空间用完不是很罕见吗?我同意如果你遇到这个问题你应该失败,而不是总是检查它。最好的情况,在 Windows 上使用 pinvoke 进行检查,如果在 Mac 上出现错误则失败
    【解决方案2】:

    我在这里添加我的答案来总结我的发现:

    TL/DR:在跨平台(Windows/Mac OS)的 Silverlight 5 中获取可用磁盘空间并不容易。

    • 您无法通过标准 Silverlight 调用获得可用磁盘空间。 Silverlight 5 中缺少DriveInfo,此处不考虑提升的权限。
    • 配额对于这类问题没有用处,它没有考虑可用磁盘空间。
    • 仅适用于 Windows 的解决方法需要提升信任,使用 P/Invoke 进入 Win32。
    • 文件系统的详细支持请看这篇文章:http://www.codeproject.com/KB/silverlight/FileExplorerInSilverlight.aspx
    • 回退是在写入文件时检查异常并在写入时向用户显示消息。人们还建议在下载开始时预先写入文件以确保有足够的磁盘空间。

    【讨论】:

      猜你喜欢
      • 2022-11-13
      • 2012-11-15
      • 1970-01-01
      • 2010-11-26
      • 2016-02-01
      • 2019-02-20
      • 1970-01-01
      • 2019-12-12
      • 2018-10-01
      相关资源
      最近更新 更多