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; } });