uwp对文件的操作和wpf,winform等等有很大的不同,主要原因是uwp对权限的要求比较严格,不能想从前那样随心所欲的读取文件。

  1.首先找到Package.appxmanifest这个文件,在功能里面勾选需要的功能,在申明里添加,在此之后才能安心写代码。

  2.打开文件选择器,选择文件夹,并保存选择的文件夹。

            //打开文件选择器FolderPicker pick = new FolderPicker();pick.FileTypeFilter.Add(".png");pick.FileTypeFilter.Add(".jpg");pick.FileTypeFilter.Add(".bmp");IAsyncOperation<StorageFolder> folderTask = pick.PickSingleFolderAsync();StorageFolder folder = await folderTask;//var folder = await pick.PickSingleFolderAsync();StorageFolder Folder = null;string Address;string Token = "";if (folder != null){Folder = folder;Address = folder.Path;Token = StorageApplicationPermissions.FutureAccessList.Add(folder);}StorageApplicationPermissions.FutureAccessList.GetFolderAsync(Token);//获取本地文件夹StorageFolder folderLocal = ApplicationData.Current.LocalFolder;//创建一个文件夹accounttry{folderLocal = await folderLocal.GetFolderAsync(folderStr);}catch (FileNotFoundException){folderLocal = await folderLocal.CreateFolderAsync(folderStr);}StorageFile file = await folderLocal.CreateFileAsync(
folderStr + ".json", CreationCollisionOption.ReplaceExisting);//保存选择的文件夹Tokenvar json = JsonSerializer.Create();ImagePath imagePath = new ImagePath { Id = DateTime.Now.ToString("yyMMddHHmmss"), Path = Token };string imageJson = imagePath.Stringify();if (file != null){try{using (StorageStreamTransaction transaction = await file.OpenTransactedWriteAsync()){using (DataWriter dataWriter = new DataWriter(transaction.Stream)){dataWriter.WriteInt32(Encoding.UTF8.GetByteCount(imageJson));dataWriter.WriteString(imageJson);transaction.Stream.Size = await dataWriter.StoreAsync();await transaction.CommitAsync();}}}catch (Exception ex){throw ex;}}            

  3.获取已选择文件夹下的图片

            StorageFile fileLocal = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appdata:///local/account/" + ImageHelper.folderStr + ".json"));if (fileLocal != null){try{//读取本地文件内容,并且反序列化using (IRandomAccessStream readStream = await fileLocal.OpenAsync(FileAccessMode.Read)){using (DataReader dataReader = new DataReader(readStream)){UInt64 size = readStream.Size;if (size <= UInt32.MaxValue){await dataReader.LoadAsync(sizeof(Int32));Int32 stringSize = dataReader.ReadInt32();await dataReader.LoadAsync((UInt32)stringSize);string fileContent = dataReader.ReadString((uint)stringSize);ImagePath imagePath = new ImagePath(fileContent);StorageFolder folder = await StorageApplicationPermissions.FutureAccessList.GetFolderAsync(imagePath.Path);//筛选图片var queryOptions = new Windows.Storage.Search.QueryOptions();queryOptions.FileTypeFilter.Add(".png");queryOptions.FileTypeFilter.Add(".jpg");queryOptions.FileTypeFilter.Add(".bmp");var query = folder.CreateFileQueryWithOptions(queryOptions);var files = await query.GetFilesAsync();ImagePath img;imgList = new ObservableCollection<ImagePath>();foreach (var item in files){IRandomAccessStream irandom = await item.OpenAsync(FileAccessMode.Read);//对图像源使用流源BitmapImage bitmapImage = new BitmapImage();bitmapImage.DecodePixelWidth = 160;bitmapImage.DecodePixelHeight = 100;await bitmapImage.SetSourceAsync(irandom);img = new ImagePath();img.Path = item.Path;img.File = bitmapImage;img.Storage = item;imgList.Add(img);}imageView.ItemsSource = imgList;}}}}catch (Exception exce){await new MessageDialog(exce.ToString()).ShowAsync();throw exce;}}

  最后的实现显现效果大概如下:

  

/*----------------------------------------------更新----------------------------------------------*/

谢谢yinyue200 的提醒,Package.appxmanifest可以不用配置。

转载于:https://www.cnblogs.com/bestckk/p/6035139.html

uwp选取文件夹并读取其中的图片相关推荐

  1. golang 文件 文件夹 创建 读取 移动 复制 写入 遍历

    目录 文件读取 创建 写入 移动 拷贝 删除 文件 创建文件夹 文件覆盖判断 遍历文件夹 权限 文件操作, 大体分为两部分: os库 : 文件\文件夹创建,读取,移动,复制 io库 : 文件内容的写入 ...

  2. php随机获取文件夹,php从文件夹随机读取文件的方法

    本文实例讲述了php从文件夹随机读取文件的方法.分享给大家供大家参考.具体实现方法如下: function RandomFile($folder='', $extensions='.*'){ // f ...

  3. C++ 从文件夹中读取文件

    OpenCV从文件夹中读取内含文件方法 参考:http://www.2cto.com/kf/201407/316515.html http://www.it610.com/article/512614 ...

  4. python opencv 实现从一个文件夹中读取图片做切割处理后放入另一个文件夹

    python opencv 实现从一个文件夹中读取图片切割处理后放入另一个文件夹. 实现的功能是把一个文件夹里的图片作处理,即把原图片中心为起点切割成1536*1536的图片,原图片必须大于这个的大小 ...

  5. python读取多个文件夹_如何从python中的文件夹中读取多个NetCDF文件

    我试图绘制多年(1979-2014)的平均温度图,我唯一的问题是尝试从文件夹中读取多个NetCDF(.nc)文件.目前我的程序将绘制单个文件,但我不明白如何使其读取文件夹中的所有文件(每年一个).我想 ...

  6. StreamingAssets文件夹的读取异常

    StreamingAssets文件夹的读取异常 参考文章: (1)StreamingAssets文件夹的读取异常 (2)https://www.cnblogs.com/zhh19981104/p/97 ...

  7. Linux C语言磁盘U盘容量读取、目录列表读取、文件夹大小读取

    Linux C语言磁盘U盘容量读取.目录列表读取.文件夹大小读取C语言源代码 #include <stdio.h> #include <sys/statfs.h> #inclu ...

  8. CV:基于face库利用cv2调用摄像头(或视频)根据人脸图片实现找人(先指定要识别已知人脸的文件夹转为numpy_array+输入新图片遍历已有numpy_array)

    CV:基于face库利用cv2调用摄像头(或视频)根据人脸图片实现找人(先指定要识别已知人脸的文件夹转为numpy_array+输入新图片遍历已有numpy_array) 目录 输出结果 设计思路 核 ...

  9. java读取hdfs文件夹_HDFS 读取、写入、遍历文件夹获取文件全路径、append

    1.从HDFS中读取数据 Configuration conf = getConf(); Path path = new Path(pathstr); FileSystem fs = FileSyst ...

最新文章

  1. github pages_使用GitHub Pages和Lighthouse增强您的开发人员产品组合
  2. putty利用密钥ssh服务登录ubuntu server 10.4
  3. 配置mysql数据库时出再错误:LookupError No installed app with label admin(亲测)
  4. 题目1005:Graduate Admission(结构体排序)
  5. uboot移植9个步骤_不知道具体的新房装修步骤?9个步骤教你吃透装修
  6. 你知道他们的输出结果吗?
  7. 初识 npm script : 用 npm init 快速创建项目
  8. mysql获取option的value_js获取下拉列表框option中的value和text的值示例代码
  9. python国际象棋ai程序_使用Python创建属于你的国际象棋AI
  10. idea创建jsp项目与JDBC连接数据库
  11. GitHub客户端 Desktop使用
  12. 下载Google瓦片地图并在Unity中作为场景底图
  13. make headers_install 用法
  14. Data URL实现用户头像上传
  15. 用foobar2000播放云服务器文件,foobar2000英文版怎么用 foobar2000怎么播放音频
  16. Android 设置无线热点模块隐藏SSID
  17. LabVIEW自动整理程序框图
  18. java modifier access_Java Modifier.getAccessSpecifier方法代码示例
  19. 码蹄集第23周赛(买礼物,召唤神龙,大促销,轨道探测)
  20. 网易云音乐视频全屏无法关闭

热门文章

  1. 【STM32】PWM程序
  2. 【STM32】系统配置控制器相关函数和类型
  3. 【IT资讯】Linux Kernel 5.8 正式版发布
  4. ele表格操作区根据数据_Vue数据绑定
  5. java Poi导入exel表格的数据,入库
  6. 每天一道LeetCode-----将二叉树原地平铺成链式结构
  7. Mysql(4)——数据库相关操作
  8. 第七章 PX4-Mavlink解析
  9. linux下使用rdesktop连接远程windows
  10. java 性能 排序_Java常用排序算法及性能测试集合