• wp8 入门到精通 Utilities类 本地存储+异步


    public class CCSetting
    {
    public async static void AddOrUpdateValue<T>(string key, T value)
    {
    try
    {
    if (key != null)
    {
    StorageFolder floder = ApplicationData.Current.LocalFolder;
    if (!(await floder.GetFoldersAsync()).Any(a => a.Name == "DrieSet"))
    {
    await ApplicationData.Current.LocalFolder.CreateFolderAsync("DrieSet");
    }
    string path = System.IO.Path.Combine("DrieSet", key);

    StorageFile file = await floder.CreateFileAsync(path, CreationCollisionOption.ReplaceExisting);
    using (Stream stream = await file.OpenStreamForWriteAsync())
    {
    DataContractJsonSerializer js = new DataContractJsonSerializer(typeof(T));
    js.WriteObject(stream, value);
    }
    }
    }
    catch
    {

    }

    }
    public async static Task<T> GetValueOrDefault<T>(string key, T defaultValue)
    {
    try
    {
    StorageFolder floder = ApplicationData.Current.LocalFolder;
    string path = System.IO.Path.Combine("DrieSet", key);
    if (!(await floder.GetFoldersAsync()).Any(a => a.Name == "DrieSet"))
    {
    return defaultValue;
    }
    else
    {
    using (Stream istream = await floder.OpenStreamForReadAsync(path))
    {
    if (istream.Length != 0)
    {
    DataContractJsonSerializer js = new DataContractJsonSerializer(typeof(T));
    return (T)js.ReadObject(istream);
    }
    }
    }
    }
    catch { }
    return defaultValue;
    }

    public async static void RemoveKey(string key)
    {
    try
    {
    StorageFolder floder = ApplicationData.Current.LocalFolder;
    string path = System.IO.Path.Combine("DrieSet", key);
    if (await CheckFileExit(path))
    {
    StorageFile file = await floder.GetFileAsync(path);
    await file.DeleteAsync();
    }
    }
    catch { }
    }


    public async static Task<bool> CheckFileExit(string fileName)
    {
    bool b = false;
    if ((await ApplicationData.Current.LocalFolder.GetFoldersAsync()).Any(a => a.Name == "DrieSet"))
    {
    StorageFolder folder = await ApplicationData.Current.LocalFolder.GetFolderAsync("DrieSet");
    b = (await folder.GetFilesAsync()).Any(a => a.Name == fileName);
    }
    else
    {
    await ApplicationData.Current.LocalFolder.CreateFolderAsync("DrieSet");
    b = false;
    }
    return b;
    }


    }

    internal class FolderHelper
    {
    const string PhoneStorage = "C:\Data\Users\Public\Pictures";
    const string SDCardStorage = "D:\";

    /// <summary>
    /// 获取手机存储设备的容量信息
    /// </summary>
    /// <param name="type">存储设备类型</param>
    /// <returns>存储设备的容量信息</returns>
    ///
    /// <exception cref="如果设备并不支持SD卡, 那么调用SD内存的时候会导致Exception, 记得try...catch..."/>
    public static async Task<StorageSpaceInfo> GetStorageSpaceInfo(StorageTypeEnum type)
    {
    string rootPath;
    switch (type)
    {
    case StorageTypeEnum.SDCard:
    rootPath = SDCardStorage;
    break;
    default:
    rootPath = PhoneStorage;
    break;
    }

    StorageFolder folder = await StorageFolder.GetFolderFromPathAsync(rootPath);
    BasicProperties properties = await folder.GetBasicPropertiesAsync();
    IDictionary<string, object> filteredProperties =
    await properties.RetrievePropertiesAsync(
    new[] {
    "System.FreeSpace",
    "System.Capacity",
    "System.FileCount"
    });

    var capacity = filteredProperties["System.Capacity"];
    if (capacity == null)
    return null;

    var freeSpace = filteredProperties["System.FreeSpace"];
    if (freeSpace == null)
    return null;

    var fileCount = filteredProperties["System.FileCount"];


    return new StorageSpaceInfo((ulong)capacity, (ulong)freeSpace);
    }
    }

    /// <summary>
    /// 存储设备的容量信息
    /// </summary>
    internal class StorageSpaceInfo
    {
    public ulong CapacityByte { get; private set; }
    public ulong FreeSpaceByte { get; private set; }
    public ulong UsageByte { get; private set; }
    public string CapacityString { get; private set; }
    public string FreeSpaceString { get; private set; }
    public string UsageString { get; private set; }

    public StorageSpaceInfo(ulong capacity, ulong freeSpace)
    {
    CapacityByte = capacity;
    FreeSpaceByte = freeSpace;
    UsageByte = capacity - freeSpace;

    CapacityString = ConvertFileSize(CapacityByte);
    FreeSpaceString = ConvertFileSize(FreeSpaceByte);
    UsageString = ConvertFileSize(UsageByte);
    }

    /// <summary>
    /// 将以byte为单位的文件大小转换成合适的显示字符串
    /// 例:1024000byte -> 1000 KB
    /// </summary>
    /// <param name="size">文件大小 单位 : bytes</param>
    /// <returns></returns>
    string ConvertFileSize(double size)
    {
    string unit = "KB";
    double thresholdValue = 1024;

    double result = size / thresholdValue;

    //MB单位
    if (result > thresholdValue)
    {
    result = result / thresholdValue;
    unit = "MB";
    }

    //GB单位
    if (result > thresholdValue)
    {
    result = result / thresholdValue;
    unit = "GB";
    }

    //TB单位
    if (result > thresholdValue)
    {
    result = result / thresholdValue;
    unit = "TB";
    }

    return string.Format("{0} {1}", result.ToString("f2"), unit);
    }
    }

    enum StorageTypeEnum
    {
    Phone,
    SDCard
    }

  • 相关阅读:
    vue中使用axios对同一个接口连续请求导致返回数据混乱的问题
    GitLab 项目
    pythonWeb开发
    $(function(){})里面不能定义函数
    elementUI el-cascader回显问题
    elementUI 弹框嵌套蒙层问题
    JS获取浏览器信息及屏幕分辨率
    mockjs导致element-ui upload组件的on-progress和axios的responseType失效
    vue中记录页面的滚动距离
    vue组件的inheritAttrs属性
  • 原文地址:https://www.cnblogs.com/androllen/p/3857364.html
Copyright © 2020-2023  润新知