在 Windows 8 中使用 C# 的 WinRT 中的磁盘空间

2024-01-08

我有两个解决方案,但都对我没有用。

解决方案1:kernel32.dll(其工作代码)

注意:但我不想在我的应用程序中导入任何 dll。 b/c 其市场提交问题。

[DllImport("kernel32.dll", SetLastError = true)]
static extern bool GetDiskFreeSpaceEx(
    string lpDirectoryName,
    out ulong lpFreeBytesAvailable,
    out ulong lpTotalNumberOfBytes,
    out ulong lpTotalNumberOfFreeBytes);


static void TestDiskSpace()
{
    IStorageFolder appFolder = ApplicationData.Current.LocalFolder;
    ulong a, b, c;
    if(GetDiskFreeSpaceEx(appFolder.Path, out a, out b, out c))
        Debug.WriteLine(string.Format("{0} bytes free", a));
}

解决方案 2:使用 DriveInfo 类(不适用于 WinRT)

注意:WinRT 开发中缺少命名空间。用于 Windows 8 开发的 WinRT 不支持此类。

DriveInfo[] allDrives = DriveInfo.GetDrives();

    foreach (DriveInfo d in allDrives)
    {
        Console.WriteLine("Drive {0}", d.Name);
        Console.WriteLine("  File type: {0}", d.DriveType);
        if (d.IsReady == true)
        {
            Console.WriteLine("  Volume label: {0}", d.VolumeLabel);
            Console.WriteLine("  File system: {0}", d.DriveFormat);
            Console.WriteLine(
                "  Available space to current user:{0, 15} bytes", 
                d.AvailableFreeSpace);

            Console.WriteLine(
                "  Total available space:          {0, 15} bytes",
                d.TotalFreeSpace);

            Console.WriteLine(
                "  Total size of drive:            {0, 15} bytes ",
                d.TotalSize);
        }
    }

因此,请为我提供不同的解决方案或任何替代方案。

winrt for windows 8 开发哪个有用?


下面是 Kraig 所说的 C# 版本,其中包含一些代码,可以将其转换为字符串,以便更好地衡量:

using System;
using System.Threading.Tasks;
using Windows.Storage;

namespace WinRTXamlToolkit.IO.Extensions
{
    public static class StorageItemExtensions
    {
        public static async Task<UInt64> GetFreeSpace(this IStorageItem sf)
        {
            var properties = await sf.GetBasicPropertiesAsync();
            var filteredProperties = await properties.RetrievePropertiesAsync(new[] { "System.FreeSpace" });
            var freeSpace = filteredProperties["System.FreeSpace"];
            return (UInt64)freeSpace;
        }

        public static string GetSizeString(this ulong sizeInB, double promoteLimit = 1024, double decimalLimit = 10, string separator = " ")
        {
            if (sizeInB < promoteLimit)
                return string.Format("{0}{1}B", sizeInB, separator);

            var sizeInKB = sizeInB / 1024.0;

            if (sizeInKB < decimalLimit)
                return string.Format("{0:F1}{1}KB", sizeInKB, separator);

            if (sizeInKB < promoteLimit)
                return string.Format("{0:F0}{1}KB", sizeInKB, separator);

            var sizeInMB = sizeInKB / 1024.0;

            if (sizeInMB < decimalLimit)
                return string.Format("{0:F1}{1}MB", sizeInMB, separator);

            if (sizeInMB < promoteLimit)
                return string.Format("{0:F0}{1}MB", sizeInMB, separator);

            var sizeInGB = sizeInMB / 1024.0;

            if (sizeInGB < decimalLimit)
                return string.Format("{0:F1}{1}GB", sizeInGB, separator);

            if (sizeInGB < promoteLimit)
                return string.Format("{0:F0}{1}GB", sizeInGB, separator);

            var sizeInTB = sizeInGB / 1024.0;

            if (sizeInTB < decimalLimit)
                return string.Format("{0:F1}{1}TB", sizeInTB, separator);

            return string.Format("{0:F0}{1}TB", sizeInTB, separator);
        }
    }
}

你可以这样使用它:

var freeSpace = await ApplicationData.Current.LocalFolder.GetFreeSpace();
Debug.WriteLine(freeSpace.GetSizeString());
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Windows 8 中使用 C# 的 WinRT 中的磁盘空间 的相关文章

随机推荐

  • 仅使用 GitHub Actions 在特定分支上运行作业

    我对 GitHub Actions 比较陌生 我有 2 份工作 一份运行我的测试 另一份将我的项目部署到服务器上 显然 我希望测试在每个分支上运行 但是只有当某些内容被推送到 master 时才应该进行部署 我正在努力寻找一种在特定分支上运
  • Pandas - 查找并迭代多列中具有匹配值的行,并将另一列中的值相乘

    这个问题是我的进一步的进步前一个 https stackoverflow com questions 51808294 pandas find rows with matching values in two columns and mul
  • 使用elasticsearch匹配所有嵌套对象

    有没有办法让elasticsearch只返回具有以下内容的文档all他们的嵌套对象符合某些标准吗 假设我有以下人为的示例 mappings person
  • 如何在 Mac OS X Mavericks 上链接 std C++ 库?

    我正在将应用程序移植到 OS X Darwin 但遇到缺少符号的链接错误 例如 std 1 basic string
  • 像 iTunes 11 一样绘制 NSTableView 交替行

    我知道还有其他关于更改交替行颜色的问题 这很容易 但这不是我想做的 我想在基于视图的 NSTableView 中绘制自定义的交替颜色行 这些行看起来像 iTunes 11 中的行 行的顶部和底部有轻微的边框 如此屏幕截图所示 NOTE 我知
  • 在海报博客上,“液体错误:私有方法‘gsub’调用 nil:NilClass” 是什么意思?

    我在博客右侧遇到了此消息的问题 你能帮我一下吗 我刚刚也遇到了这个错误 您运行的液体过滤器的值可能为零 我的 jekyll 网站上有这样的内容 在我的根页面上 未设置标题 您可以通过确保设置该值来修复它 或者您可以使用类似这样的方法来强制将
  • 在 System.Windows.Form 派生类中的何处处置资源?

    我有一个表单 它在其构造函数中创建了一些我需要处理的一次性资源 但是 C 表单设计器已在 Designer cs 文件中生成 Dispose 方法 该方法中似乎没有任何类型的用户挂钩 所以我不知道应该如何实现典型的IDisposable图案
  • 获取丰富编辑库的版本

    ALL 是否可以获得程序使用的 RichEdit 控件的版本 Version Class name Library Shipped with New features 1 0 RICHEDIT Riched32 dll Windows 95
  • 鲁比:析构函数?

    我偶尔需要在缓存目录中使用 rmagick 创建图像 为了快速删除它们 而又不会在视图中丢失它们 我想在图像类的 Ruby 实例被破坏或进入垃圾收集时删除图像文件 我必须重写什么 ClassMethod 才能为析构函数提供代码 edgeru
  • 根据pandas数据框中的关键列减去列

    我有两个数据框看起来像 df1 ID A B C D 0 ID1 0 5 2 1 3 5 6 6 1 ID2 1 2 5 5 4 3 2 2 2 ID1 0 7 1 2 5 6 6 0 3 ID3 1 1 7 2 10 3 2 df2 ID
  • 获取 JSON 数组中的最大值

    我正在尝试创建一个 JavaScript 函数 该函数从外部 JSON 中的数组获取信息 然后获取其中一个 JSON 变量的最大值 或前 5 个值 对于此示例 假设我想要获取值 ppg 的最大值 这是该数组的一个小样本 player And
  • 我可以将 Activex 与 silverlight4 一起使用吗?

    我需要在我的 silverlight 应用程序中使用 ActiveX 控件 经过一些研究 我发现了 silverlight 应用程序可以使用 ActiveX 控件的几种方法 在网页中使用 ActiveX 控件以及 silverlight 插
  • 使用 ScheduledExecutorService 启动和停止计时器

    从我的阅读来看 ScheduledExecutorService 似乎是在 Java 中启动和停止计时器的正确方法 我需要移植一些启动和停止计时器的代码 这不是一个周期性定时器 此代码在启动计时器之前停止计时器 因此 实际上每次启动都是一次
  • 如何使用swift在iOS嵌入式动态框架中使用第三方库

    现在我有一个项目 比如 testApp 使用一些第三方库 比如 alamofire 和 Objective C 中的其他一些库 现在我想添加一个今天的小部件 根据一些教程 我创建了一个新的目标 testAppKit 作为共享动态框架 并将目
  • Java:System.out.println() 这么慢的原因是什么?

    对于可以在文本编辑器中完成的小型逻辑程序 为了跟踪 我使用经典的System out println 我想你们都知道在大量迭代的块中使用它是多么令人沮丧 为什么这么慢 其背后的原因是什么 这与 JVM 没有任何关系 将文本打印到屏幕上只涉及
  • FileProvider - 使用默认内部存储文件夹,文件路径不明确

    它在文档中说 FileProvider 只能为以下位置的文件生成内容 URI 您事先指定的目录 要指定目录 使用 XML 的子元素指定其存储区域和路径 元素 例如 以下 paths 元素告诉 您打算请求图像 的内容 URI 的 FilePr
  • 如何在AngularJS中获取图像尺寸?

    我想在用户选择要上传的文件时检查图像的尺寸
  • 反转角度 2 *ngFor

    li user name is user age years old li 是否可以反转 ngFor 使项目自下而上添加 你可以简单地使用 JavaScript reverse 在阵列上 不需要特定角度的解决方案 li user name
  • 首先在 EF 代码中将文字或常量作为复合键的一部分

    我对实体框架的代码优先方法相对较新 我已经使用数据库优先方法有一段时间了 但是代码优先似乎更适合我当前正在开发的应用程序 我正在使用现有的 MS SQL 数据库 并且不允许我对数据库进行任何更改 我使用 Code First 的原因是 Fl
  • 在 Windows 8 中使用 C# 的 WinRT 中的磁盘空间

    我有两个解决方案 但都对我没有用 解决方案1 kernel32 dll 其工作代码 注意 但我不想在我的应用程序中导入任何 dll b c 其市场提交问题 DllImport kernel32 dll SetLastError true s