0
我編寫了一個提供下載文件功能的類,我使用CreateFileAsync創建文件,然後使用WriteBytesAsync寫入下載的每個字節。如果目標磁盤寫入被拒絕或容量不足,WriteBytesAsync或CreateFileAsync是否會引發異常?CreateFileAsync將寫入文件寫入磁盤寫入訪問被拒絕或容量不足時會發生什麼
謝謝。
我編寫了一個提供下載文件功能的類,我使用CreateFileAsync創建文件,然後使用WriteBytesAsync寫入下載的每個字節。如果目標磁盤寫入被拒絕或容量不足,WriteBytesAsync或CreateFileAsync是否會引發異常?CreateFileAsync將寫入文件寫入磁盤寫入訪問被拒絕或容量不足時會發生什麼
謝謝。
如果磁盤被寫保護,則可以在創建文件時生成UnauthorizedAccessException
。我建議你檢查磁盤驅動器中是否有空閒空間。使用下面給出的方法來獲得磁盤驅動器的空閒容量&。
public static class StorageItemExtensions
{
public static async Task<IDictionary<string, object>> GetSpace(this IStorageItem sf)
{
var properties = await sf.GetBasicPropertiesAsync();
return await properties.RetrievePropertiesAsync(new[] { "System.FreeSpace", "System.Capacity" });
}
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:F2}{1}KB", sizeInKB, separator);
if (sizeInKB < promoteLimit)
return string.Format("{0:F2}{1}KB", sizeInKB, separator);
var sizeInMB = sizeInKB/1024.0;
if (sizeInMB < decimalLimit)
return string.Format("{0:F2}{1}MB", sizeInMB, separator);
if (sizeInMB < promoteLimit)
return string.Format("{0:F2}{1}MB", sizeInMB, separator);
var sizeInGB = sizeInMB/1024.0;
if (sizeInGB < decimalLimit)
return string.Format("{0:F2}{1}GB", sizeInGB, separator);
if (sizeInGB < promoteLimit)
return string.Format("{0:F2}{1}GB", sizeInGB, separator);
var sizeInTB = sizeInGB/1024.0;
if (sizeInTB < decimalLimit)
return string.Format("{0:F2}{1}TB", sizeInTB, separator);
return string.Format("{0:F2}{1}TB", sizeInTB, separator);
}
}
用法:
var filteredProperties = await ApplicationData.Current.LocalFolder.GetSpace();
var diskSpace = ((UInt64)filteredProperties["System.FreeSpace"]).GetSizeString() + "/" + ((UInt64)filteredProperties["System.Capacity"]).GetSizeString();
感謝您的回答,我覺得這是很好的解決方案! –
我很高興,我的回答爲你工作:) – Xyroid