16、C++获取磁盘空间的方法

 

使用 C# 获取磁盘空间的方法:

 public async static Task<int> GetFreeSpace()
 {
     StorageFolder localFolder = ApplicationData.Current.LocalFolder;
     var properties = await localFolder.GetBasicPropertiesAsync();
     var filteredProperties = await properties.RetrievePropertiesAsync(new[] { "System.FreeSpace" });
     string freeSpace = filteredProperties["System.FreeSpace"].ToString();
     ulong size;
     int mb = 0;
     if (ulong.TryParse(freeSpace, out size))
         mb = (int)(size / (1024 * 1024));

     return mb;
 }

不过使用 C++ 比较麻烦,在网页上没有搜到,在微软 Github-(https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples) 上的 demo(FileAccess)中,找到了使用方式,改造了一下:

auto folder = Windows::Storage::ApplicationData::Current->LocalFolder;

auto outputText = std::make_shared<String^>("Space: " + folder->Name);

// Get basic properties
create_task(folder->GetBasicPropertiesAsync()).then([this, outputText](task<BasicProperties^> task)
{
    try
    {
        BasicProperties^ basicProperties = task.get();
        *outputText += "\nFile size: " + basicProperties->Size.ToString() + " bytes";
    }
    catch (COMException^ ex)
    {
        //rootPage->HandleFileNotFoundException(ex);
    }
}).then([this, folder]()
{
    // Get extra properties
    auto propertiesName = ref new Vector<String^>();
    propertiesName->Append(L"System.FreeSpace");
    propertiesName->Append(L"System.Capacity");

    return folder->Properties->RetrievePropertiesAsync(propertiesName);
}).then([this, outputText](IMap<String^, Object^>^ extraProperties)
{
    auto propValue = extraProperties->Lookup(L"System.FreeSpace");
    if (propValue != nullptr)
    {
        *outputText += "\n FreeSpace: " + propValue;
    }

    auto propValue2 = extraProperties->Lookup(L"System.Capacity");
    if (propValue2 != nullptr)
    {
        *outputText += "\n Capacity: " + propValue2;
    }
});

 

posted @ 2016-09-21 17:34  博琼  阅读(1979)  评论(0编辑  收藏  举报