原先以为UWP只能使用默认的那几个库。但是后来发现别人的应用中可以随意设置默认的文件保存位置。于是找到了林德熙大佬的这篇文章。
重点是Windows.Storage.AccessCache
这个命名空间中的FutureAccessList
类可以保存或者获取最近使用的文件或文件夹。不过获取文件或者文件夹时需要用的一个Token,可以在添加文件或文件夹的时候保存下来。
1、保存文件夹
/// <summary> /// 设置默认的下载文件夹 /// </summary> /// <returns> /// </returns> internal static async Task SetDefaultPathAsync() { FolderPicker picker = new FolderPicker(); picker.FileTypeFilter.Add(".png"); var folder = await picker.PickSingleFolderAsync(); if (folder != null) { var token = StorageApplicationPermissions.FutureAccessList.Add(folder); // 把token保存到了本地设置 AppSettingsHelper.SaveLocalSetting(AppLocalSettings.ImageSavePathTokenKey, token); } else { // NotifyPopup是自己定义的通知 var notify = new NotifyPopup("选择文件夹失败,请重试"); notify.Show(); } }
2、获取文件夹
这里在未获取到token,或者获取文件夹结果为null
时,在图片库新建一个和应用名称相同的文件夹。
/// <summary> /// 获取默认的下载文件夹 /// </summary> /// <returns> /// </returns> internal async static Task<StorageFolder> GetImageFolderAsync() { // 从本地设置取出token var token = AppSettingsHelper.GetLocalSetting(AppLocalSettings.ImageSavePathTokenKey); if (token == null) { return await KnownFolders.PicturesLibrary.CreateFolderAsync("AppDisplayName".GetLocalized(), CreationCollisionOption.OpenIfExists); } else { var folder = await StorageApplicationPermissions.FutureAccessList.GetFolderAsync(token); if (folder == null) { return await KnownFolders.PicturesLibrary.CreateFolderAsync("AppDisplayName".GetLocalized(), CreationCollisionOption.OpenIfExists); } else { return folder; } } }
PS:还可以使用系统自带的照片app来设置默认下载路径。以前发现的彩蛋。
本文由 Kevin Yang 发布在 Kevin Yang,转载此文请保持文章完整性,并请附上文章来源(Kevin Yang)及本页链接。
原文链接:https://www.yzj0308.com/uwp-set-file-default-save-path/
原文链接:https://www.yzj0308.com/uwp-set-file-default-save-path/