Win10的开发经常需要进行文件的操作,因此文件的选择对话框FileOpenPicker、文件保存对话框FileSavePicker以及文件夹选择对话框FolderPicker十分重要。这三者的操作也比较简单。但有一些小细节可能许多人没注意到,听我慢慢道来,精彩留在后面。

三个对话框的操作在MSDN文档中也讲解的比较细致了,同时也有许多相似之处,我分开一个个做个简单的介绍。

FileOpenPicker:

MSDN文档:链接

属性:(主要)

ViewMode:文件的展示形式。有两个可选的枚举值,PickerViewMode.Thumbnail(缩略图形式)和PickerViewMode.List(列表形式)

SuggestedStartLocation:对话框打开时的默认路径。枚举值,详见 MSDN文档

FileTypeFilter:可选择的文件类型。也就是你要打开的是什么类型的文件,如txt、doc、jpg等。可以使用其Add方法添加类型。这个很重要,如果不设置会抛出异常

方法:

FileOpenPicker只有两个方法,PickSingleFileAsync和PickMultipleFilesAsync。两者都是打开对话框,需要await修饰,区别从方法签名就可以看出。使用PickSingleFileAsync,用户只能选取一个文件,使用PickMultipleFilesAsync,用户可以选取多个文件。

下面是FileOpenPicker的简单操作:

 private async void FileOpen_Click(object sender, RoutedEventArgs e)
{
FileOpenPicker picker = new FileOpenPicker();
picker.ViewMode = PickerViewMode.List; //设置文件的现实方式,这里选择的是图标
picker.SuggestedStartLocation =PickerLocationId.PicturesLibrary; //设置打开时的默认路径,这里选择的是图片库
picker.FileTypeFilter.Add("*"); //添加可选择的文件类型,这个必须要设置 "*"表示所有文件
file = await picker.PickSingleFileAsync(); //只能选择一个文件 if (file!=null)
{
//to do something
}
}

FileSavePicker:

msdn文档:链接

属性:(主要)

DefaultFileExtension:默认文件的拓展名

FileTypeChoices:文件的保存类型

SuggestedFileName:默认保存的文件名

SuggestedStartLocation:默认的文件保存位置

方法:

FileSavePicker只有一个方法:PickSaveFileAsync,打开对话框,需要await修饰

示例:

private async void FileSave_Click()
{
FileSavePicker picker = new FileSavePicker();
picker.DefaultFileExtension = ".txt";
picker.FileTypeChoices.Add("Plain Text", new List<string>() { ".txt" });
picker.SuggestedFileName = "New Document";
picker.SuggestedStartLocation = PickerLocationId.DocumentsLibrary;
StorageFile file = await picker.PickSaveFileAsync();
}

效果图:

尼玛,说好的精彩在后面呢?其实并没有什么精彩的,只是后面比前面的稍微比较有价值点

FolderPicker:

msdn文档:链接

属性:(主要)

几个主要的属性ViewMode、SuggestedStartLocation和FileTypeFilter都跟FileOpenPicker一样,就不多废话了。不过似乎设置FileTypeFilter并没有什么卵用,稍后说这个问题。

方法:QueryOptions

FolderPicker有两个方法,PickSingleFolderAsync和PickFolderAndContinue,打开文件夹选择器,都需要await修饰。前者用于WP中,后者用于PC上。

调用PickSingleFolderAsync获得folder之后,可以调用其.GetFilesAsync()方法获取当前文件夹下的文件。现在来说说那个没有什么卵用的FileTypeFilter。

看看下面几行代码:

private async void Folder_Click()
{
FolderPicker picker = new FolderPicker();
picker.FileTypeFilter.Add(".srt");
StorageFolder folder = await picker.PickSingleFolderAsync();
var files = await folder.GetFilesAsync();
int num = files.Count;
}

我的目的是读取桌面上的字幕文件(.srt)。运行后num的值为6,然而我的桌面是这样的,问题不言而喻了吧。没错虽然设置了FileTypeFilter,然而并没有什么卵用。

在传统的桌面程序中可以这么写,就可以得到正确的结果:

var file = Directory.GetFiles(folder, "*.srt");

解决方案:使用QueryOptions类

属性:

FileTypeFilter:同前面的一样,指定可选择的文件类型

FolderDepth:指示搜索查询是否应生成文件夹内容的浅表视图或所有文件和子文件夹的深递归视图。指示查询文件夹的深度的值。默认值为 FolderDepth.Shallow。预定义查询通常重写此属性并将其更改为 FolderDepth.Deep。(这是官方说的,其实我看不懂是什么东西)

IndexerOption:指定是否使用系统索引或文件系统来检索查询结果的值

然后就可以这么用了:

 private async void Folder_Click()
{
FolderPicker picker = new FolderPicker();
picker.FileTypeFilter.Add(".srt");
StorageFolder folder = await picker.PickSingleFolderAsync(); var queryOptions = new QueryOptions();
queryOptions.FileTypeFilter.Add(".srt");
//queryOptions.FolderDepth = FolderDepth.Shallow;
//queryOptions.IndexerOption = IndexerOption.DoNotUseIndexer; var query = folder.CreateFileQueryWithOptions(queryOptions);
var files = await query.GetFilesAsync(); int num = files.Count;
}

运行结果num为2,是正确的。到此FolderPicker的功能基本讲解完毕。

其实在查阅资料时,还发现了这么一个类:FileInformationFactory,官方解释是“用于从查询结果加载有关文件和文件夹的信息,并将这些文件系统项绑定到 JavaScript ListView 或 XAML ListView 和 GridView 控件。加载信息后,应用程序可使用同步操作快速访问该信息。”不太懂这段话的意思,以后用到了再回来补充吧。

文件操作之FileOpenPicker、FileSavePicker和FolderPicker的更多相关文章

  1. Win8.1应用开发之文件操作

    在操作文件之前,先相应用的应用功能声明进行设定.用户通过C#(非UI)对win8.1上的文件进行訪问,仅仅能局限于图片,音乐,视频和文档四个目录. 而通过文件选取器则能訪问到整个系统的文件. (一)应 ...

  2. 【.NET深呼吸】Zip文件操作(1):创建和读取zip文档

    .net的IO操作支持对zip文件的创建.读写和更新.使用起来也比较简单,.net的一向作风,东西都准备好了,至于如何使用,请看着办. 要对zip文件进行操作,主要用到以下三个类: 1.ZipFile ...

  3. 野路子出身PowerShell 文件操作实用功能

    本文出处:http://www.cnblogs.com/wy123/p/6129498.html 因工作需要,处理一批文件,本想写C#来处理的,后来想想这个是PowerShell的天职,索性就网上各种 ...

  4. Node基础篇(文件操作)

    文件操作 相关模块 Node内核提供了很多与文件操作相关的模块,每个模块都提供了一些最基本的操作API,在NPM中也有社区提供的功能包 fs: 基础的文件操作 API path: 提供和路径相关的操作 ...

  5. 归档NSKeyedArchiver解归档NSKeyedUnarchiver与文件管理类NSFileManager (文件操作)

    ========================== 文件操作 ========================== 一.归档NSKeyedArchiver 1.第一种方式:存储一种数据. // 归档 ...

  6. SQL Server附加数据库报错:无法打开物理文件,操作系统错误5

    问题描述:      附加数据时,提示无法打开物理文件,操作系统错误5.如下图: 问题原因:可能是文件访问权限方面的问题. 解决方案:找到数据库的mdf和ldf文件,赋予权限即可.如下图: 找到mdf ...

  7. 通过cmd完成FTP上传文件操作

    一直使用 FileZilla 这个工具进行相关的 FTP 操作,而在某一次版本升级之后,发现不太好用了,连接老是掉,再后来完全连接不上去. 改用了一段时间的 Web 版的 FTP 工具,后来那个页面也 ...

  8. Linux文件操作的主要接口API及相关细节

    操作系统API: 1.API是一些函数,这些函数是由linux系统提供支持的,由应用层程序来使用,应用层程序通过调用API来调用操作系统中的各种功能,来干活 文件操作的一般步骤: 1.在linux系统 ...

  9. C语言的fopen函数(文件操作/读写)

    头文件:#include <stdio.h> fopen()是一个常用的函数,用来以指定的方式打开文件,其原型为:    FILE * fopen(const char * path, c ...

随机推荐

  1. iOS中,在类的源文件(.m)中,@interface部分的作用?

      此@interface部分为类扩展(extension). 其被设计出来就是为了解决两个问题的 其一,定义类私有方法的地方. 其二,实现public readonly,private readwr ...

  2. ToolWindow工具类

    package com.dute.dutenews.utils; import android.app.Activity; import android.content.Context; import ...

  3. Linux SendMail服务启动慢总结

    在 CentOS release 6.6 上启动sendmail服务时发现服务启动过程非常慢,基本上要耗费3分多钟.有点纳闷:什么原因导致sendmail启动这么慢?搜索了这方面的一些资料,结合自己的 ...

  4. CentOS7 虚拟机搭建、初始设置、简单使用

    注:虚拟机安装的系统是CentOS7 1.网络设置 网络的设置主要是为了让虚拟机和物理机能够相互ping通,这样就可以用XShell之类的工具操控,也可以上网 见另一篇 CentOS7网络配置 2.物 ...

  5. IntelliJ IDEA 教程设置讲解

    IntelliJ IDEA 常用设置讲解 说明 IntelliJ在业界被公认为最好的java开发工具之一,尤其在智能代码助手.代码自动提示.重构.J2EE支持.Ant.JUnit.CVS整合.代码审查 ...

  6. 从零自学Hadoop(17):Hive数据导入导出,集群数据迁移下

    阅读目录 序 将查询的结果写入文件系统 集群数据迁移一 集群数据迁移二 系列索引 本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 文章是哥(mephis ...

  7. Linux 命令学习

    当前登陆目录:

  8. android Intent使用

    ntent.setType(“image/*”);//图片格式 intent.setType(“audio/*”); //选择音频 intent.setType(“video/*”); //选择视频 ...

  9. Entity Framework Code First反向生成代码

    那些年我们生成的代码 早年,笨点的方法通常都是使用DbFirst先生成cs,然后把CS复制出来做些修改 后台基本上就自己使用T4来写,但是一直也没时间完善成通用的版本 MS官方 提供了EntityFr ...

  10. .NET 类型(Types)的那些事

    引言 您是.Net工程师?那 .NetFramework中的类型您知道有三大类吗?(除了引用类型和值类型,还有?) 引用类型一定在“堆”上,值类型一定在“栈”上? 那引用类型在内存中的布局细节您又知道 ...