为了账号安全,请及时绑定邮箱和手机立即绑定

在 UWP 的 DriveInfo 中访问 AvailableFreeSpace/TotalSize

在 UWP 的 DriveInfo 中访问 AvailableFreeSpace/TotalSize

C#
偶然的你 2022-01-09 17:10:08
我可以使用 DriveInfo.GetDrives() 方法列出本地磁盘。另外,我使用 Name 属性访问/获取驱动器名称。但我收到错误为“系统。未经授权的访问异常:'访问路径'X:\'被拒绝。” 在访问诸如 AvailableFreeSpace 之类的任何属性时。代码如下。DriveInfo[] allDrives = DriveInfo.GetDrives();foreach (DriveInfo d in allDrives){   Debug.WriteLine("Drive: " + d.Name); //This line executes w/o error!   Debug.WriteLine("Drive: " + d.AvailableFreeSpace);   Debug.WriteLine("Drive: " + d.TotalSize);}注意:我在 Package Tag Block 和 <rescap:Capability Name="broadFileSystemAccess"/> 中放置了以下行 xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"我项目的 Package.appxmanifest 文件中的功能标记块。
查看完整描述

1 回答

?
倚天杖

TA贡献1828条经验 获得超3个赞

我可以使用以下代码为我的一些驱动器获取总的可用磁盘空间:


        const String k_freeSpace = "System.FreeSpace";

        const String k_totalSpace = "System.Capacity";

        DriveInfo[] allDrives = DriveInfo.GetDrives();

        foreach (DriveInfo d in allDrives)

        {

            try

            {

                Debug.WriteLine("Drive: " + d.Name);

                Debug.WriteLine("RootDir: " + d.RootDirectory.FullName);


                StorageFolder folder = await StorageFolder.GetFolderFromPathAsync(d.RootDirectory.FullName);

                var props = await folder.Properties.RetrievePropertiesAsync(new string[] { k_freeSpace, k_totalSpace });

                Debug.WriteLine("FreeSpace: " + (UInt64)props[k_freeSpace]);

                Debug.WriteLine("Capacity:  " + (UInt64)props[k_totalSpace]);

            }

            catch (Exception ex)

            {

                Debug.WriteLine(String.Format("Couldn't get info for drive {0}.  Does it have media in it?", d.Name));

            }

        }

我的“最低版本”和“目标版本”都针对 Windows 10 版本 1803(10.0:Build 17134)。


以下是我的 Package.appxmanifest 的一些摘录


<Package xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10" 

         xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest" 

         xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10" 

        xmlns:iot="http://schemas.microsoft.com/appx/manifest/iot/windows10" 

        xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities" 

        IgnorableNamespaces="uap mp iot rescap">

...


<Capabilities>

    <Capability Name="internetClient" />

    <rescap:Capability Name="broadFileSystemAccess" />

  </Capabilities>

</Package>


查看完整回答
反对 回复 2022-01-09
  • 1 回答
  • 0 关注
  • 145 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信