繁体   English   中英

当CreateFileAsync将文件写入磁盘但写入访问被拒绝或容量不足时,会发生什么情况

[英]What's happen when CreateFileAsync write file to a disk which Write access denied or capacity shortage

我编写了一个提供下载文件功能的类,使用CreateFileAsync创建文件,然后使用WriteBytesAsync写入下载的每个字节。 如果目标磁盘被拒绝写入或容量不足,WriteBytesAsync或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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM