UWP中的文件相关操作
最近开始做UWP开发,图省事儿就把自己之前一个Winform项目的一部分代码拷贝到了新写的UWP项目中来。整出了一些幺蛾子,下面做一个记录。
首先提一个重点就是:UWP里关于文件的操作尽量用StorageFile类来搞!!!!!!!!!!!!
1.UWP的文件选取
UWP的文件选取使用的是FileOpenPicker,我这里是用来选图片文件的,不多说直接上代码:
FileOpenPicker fileOpenPicker = new FileOpenPicker();
fileOpenPicker.SuggestedStartLocation = PickerLocationId.PicturesLibrary;
fileOpenPicker.FileTypeFilter.Add(".jpg");
fileOpenPicker.FileTypeFilter.Add(".png");
fileOpenPicker.ViewMode = PickerViewMode.Thumbnail; var imgFile = await fileOpenPicker.PickSingleFileAsync(); if (imgFile == null)
{
return;
}
关于这块儿的具体的各种操作可以去微软爸爸那里查,最标准最权威:https://docs.microsoft.com/zh-cn/windows/uwp/audio-video-camera/imaging
2.文件读取操作
这一块儿的BUG是最让我恶心的!!
最开始的时候这一块儿的代码我是直接从Winform项目里直接拷出来的用的是File.ReadAllBytes,结果Debug的时候什么问题都没有出现,Release出来后直接提示我没有权限访问文件(UnauthorizedAccessException)。。。。。
最初的错误代码(可以在Winform里面用,UWP里面的话Release出来跑不成):
private async Task<List<ByteArrayContent>> GetFileByteArrayContent(HashSet<string> files)
{
List<ByteArrayContent> list = new List<ByteArrayContent>(); foreach (var file in files)
{
await Task.Run(() => {
if(file.Length > )
{
try
{
//file是string类型的文件路径
var fileContent = new ByteArrayContent(File.ReadAllBytes(file));
ContentDispositionHeaderValue dispositionHeader = new ContentDispositionHeaderValue("file");
dispositionHeader.DispositionType = "file";
dispositionHeader.Name = "imageFile";
dispositionHeader.FileName = Path.GetFileName(file);
fileContent.Headers.ContentDisposition = dispositionHeader;
list.Add(fileContent);
}
catch(Exception ex)
{
this.TextBlock_lyric.Text = ex.Message;
}
}
});
}
return list;
}
然后我去微软爸爸那儿里查了一下File.ReadAllBytes函数https://msdn.microsoft.com/en-us/library/system.io.file.readallbytes(v=vs.110).aspx之后发现问题原因应该是没有权限访问文件,查到问题所在后就开始用StorageFile的方法来处理自己所选择的文件修改后的代码如下:
private async Task<List<ByteArrayContent>> GetByteArrayContents()
{
List<ByteArrayContent> files = new List<ByteArrayContent>();
string exceptionMsg = string.Empty;
if (imgFile != null)
{
try
{
//imgFile是一个StorageFile类的对象
var buffer = await FileIO.ReadBufferAsync(imgFile);
byte[] content = new byte[buffer.Length];
// Use a dataReader object to read from the buffer
using (DataReader dataReader = DataReader.FromBuffer(buffer))
{
dataReader.ReadBytes(content);
// Perform additional tasks
} var fileContent = new ByteArrayContent(content);
ContentDispositionHeaderValue dispositionHeader = new ContentDispositionHeaderValue("file");
dispositionHeader.DispositionType = "file";
dispositionHeader.Name = "imageFile";
dispositionHeader.FileName = imgFile.Path;
fileContent.Headers.ContentDisposition = dispositionHeader;
files.Add(fileContent);
}
catch (Exception ex)
{
exceptionMsg = ex.Message;
}
}
this.TextBlock_lyric.Text += exceptionMsg;
return files;
}
3.其他
更改控件属性的操作不能写到异步操作里,不然会崩
程序里有读取文件的操作的话尽量去把Package.appxmanifest文件里对应的权限开一下,虽然有的人说不开也行。。。但是我头不铁,我还是老老实实开了。
问题解决后总结出一条经验,MSDN真好用!!
UWP中的文件相关操作的更多相关文章
- Head First Python-Python中与文件相关的操作-读、处理、写
最近在看head first python,前面也写了一些笔记,但是基本上没有涉及到一些完整的代码,现在将书中的文件相关操作的代码整理,供以后参考. 主要分为两大部分,读取文件.处理异常,处理文件.存 ...
- Git基本命令 -- 基本工作流程 + 文件相关操作
可以先找一个已经被git管理的项目, 我就使用这个项目吧: https://github.com/solenovex/ID3-Editor 基本工作流程 克隆以后呢, 进入该目录查看一下状态: 然后添 ...
- python文件相关操作
Python文件相关操作 打开文件 打开文件,采用open方法,会将文件的句柄返回,如下: f = open('test_file.txt','r',encoding='utf-8') 在上面的代码中 ...
- Qt中与文件目录相关操作
一.与文件目录操作有关操作. Qt中与文件目录相关的操作在QDir中,需加入#include <QDir>语句. QDir::drives()是列出电脑根目录下的所有目录,返回的是QFil ...
- linux中Makefile文件相关内容
第一章.概述什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional(专业)的程序员,m ...
- VC++文件相关操作的函数封装实现
在开发编译工具中,需要用到文件的相关操作,于是就封装了相关的函数实现: //判断文件是否存在 BOOL FileIsExist(CString strFileName) { CFileFind fin ...
- Windows系统中监控文件复制操作的几种方式
http://blog.sina.com.cn/s/blog_4596beaa0100lp4y.html 1. ICopyHook 作用: 监视文件夹和打印机移动,删除, 重命名, 复制操作. 可以得 ...
- Nodejs文件相关操作
欢迎关注我的博客我在马路边 适用人群 本文适用于刚接触Node的小白,毕竟我也是小白,大佬请绕行. Node文件操作 在实际开发中遇到很多有关文件及文件夹的操作,比如创建.删除文件及文件夹,文件拷贝. ...
- centos中mariadb的相关操作
Tip 1 在使用mariadb中启动服务报错 : Failed to start mariadb.service: Unit not found. 解决办法: yum install -y mari ...
随机推荐
- 【Python】 zabbixAPI的包装pyzabbix
pyzabbix pyzabbix是zabbixAPI的第三方python包装.从网上莫名其妙地搞到了一份源码,看了一下之后发现实现方法还蛮巧妙的,感觉挺好的就记下来了.那些个源码本身其实也是一个个单 ...
- Java基础学习笔记二十三 Java核心语法之反射
类加载器 类的加载 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,链接,初始化三步来实现对这个类进行初始化. 加载就是指将class文件读入内存,并为之创建一个Class对象.任 ...
- JavaEE HttpServlet 解析
上一篇 文章中有提到,GenericServlet 是对 Servlet 的一个通用实现,并提供了一个抽象的 service() 方法.而我们的互联网是使用 Http 协议来通信的,那针对这个&quo ...
- python 面向对象的程序设计
一:什么是编程范式? 编程是程序员用特定的语法 + 数据结构 + 算法组成的代码来告诉计算机如何执行任务的过程. 如果把编程的过程比喻为练习武功,那么编程范式指的就是武林中的各种流派,而在编程的世界里 ...
- 第十四,十五周PTA作业
1.第十四周part1 7-3 #include<stdio.h> int main() { int n; scanf("%d",&n); int a[n]; ...
- [福州大学]W班平时成绩排名
评分链接 个人作业 第一次作业 http://www.cnblogs.com/1qazse4/p/7506448.html 第二次作业 http://www.cnblogs.com/1qazse4/p ...
- [福大软工] W班 第2次成绩排行榜
作业链接 https://edu.cnblogs.com/campus/fzu/FZUSoftwareEngineering1715W/homework/866 评分细则 本次个人项目分数由三部分组成 ...
- beta冲刺用户测评-咸鱼
测评人:庄加鑫-咸鱼 测评结果 一.使用体验数据加载响应很快!页面切换丝滑流畅!UI有点偏暗,有些字被覆盖了.页面布局过于居中,两侧空白范围较大.总体功能完善.二.登录.注册.忘记密码界面管理员登录 ...
- java web 初学
我希望在本学期本堂课上学会使用java web 框架 精通mvc架构模式 学会通过框架和数据库对产品进行构造与编写. 我计划每周用16小时的时间进行学习java web 一周4学时上课时间 周一到周五 ...
- 201621123050 《Java程序设计》第4周学习总结
1. 本周学习总结 1.1 写出你认为本周学习中比较重要的知识点关键词 继承.抽象.多态 1.2 尝试使用思维导图将这些关键词组织起来.注:思维导图一般不需要出现过多的字. 1.3 可选:使用常规方法 ...