背水一战 Windows 10 (90) - 文件系统: 获取 Package 中的文件, 可移动存储中的文件操作, “库”管理
作者:webabcd
介绍
背水一战 Windows 10 之 文件系统
- 获取 Package 中的文件
- 可移动存储中的文件操作
- “库”管理
示例
1、演示如何获取 Package 中的文件
FileSystem/PackageData/Demo.xaml
<Page
x:Class="Windows10.FileSystem.PackageData.Demo"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Windows10.FileSystem.PackageData"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"> <Grid Background="Transparent">
<StackPanel Margin="10 0 10 10"> <TextBlock Name="lblMsg" Margin="5" /> <Button Name="btnRead" Content="读取 Package 中的文件" Click="btnRead_Click" Margin="5" /> <Image Name="img" Stretch="None" HorizontalAlignment="Left" Margin="5" /> </StackPanel>
</Grid>
</Page>
FileSystem/PackageData/Demo.xaml.cs
/*
* 演示如何获取 Package 中的文件
* 1、可以通过 Package.Current.InstalledLocation.GetFileAsync() 访问
* 2、可以通过 ms-appx:/// 访问
*
*
* StorageFile - 文件操作类
* public static IAsyncOperation<StorageFile> GetFileFromApplicationUriAsync(Uri uri) - 获取本地指定 uri 的文件
*
*
* 注:需要访问的 Package 中的文件的属性的“生成操作”应该设置为“内容”
*/ using System;
using Windows.Storage;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls; namespace Windows10.FileSystem.PackageData
{
public sealed partial class Demo : Page
{
public Demo()
{
this.InitializeComponent();
} private async void btnRead_Click(object sender, RoutedEventArgs e)
{
// 写(无法向程序包中写数据,会报错)
// StorageFile fileWrite = await Package.Current.InstalledLocation.CreateFileAsync(@"FileSystem\PackageData\readWriteDemo.txt", CreationCollisionOption.ReplaceExisting);
// await FileIO.WriteTextAsync(fileWrite, "I am webabcd: " + DateTime.Now.ToString()); // 读
// StorageFile fileRead = await Package.Current.InstalledLocation.GetFileAsync(@"FileSystem\PackageData\readWriteDemo.txt");
StorageFile fileRead = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///FileSystem/PackageData/readWriteDemo.txt", UriKind.Absolute));
string textContent = await FileIO.ReadTextAsync(fileRead);
lblMsg.Text = textContent; // 引用程序包内的图片文件并显示
img.Source = new Windows.UI.Xaml.Media.Imaging.BitmapImage(new Uri("ms-appx:///Assets/hololens.jpg"));
}
}
}
2、演示如何在可移动存储中对文件进行操作
FileSystem/RemovableDevice/Demo.xaml
<Page
x:Class="Windows10.FileSystem.RemovableDevice.Demo"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Windows10.FileSystem.RemovableDevice"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"> <Grid Background="Transparent">
<StackPanel Margin="10 0 10 10"> <TextBlock Name="lblMsg" Margin="5" /> <ListBox Name="listBox" Width="400" Height="200" HorizontalAlignment="Left" Margin="5" SelectionChanged="listBox_SelectionChanged" /> <Button Name="btnCopyFile" Content="复制文件到当前选中的设备中" Margin="5" Click="btnCopyFile_Click" /> </StackPanel>
</Grid>
</Page>
FileSystem/RemovableDevice/Demo.xaml.cs
/*
* 演示如何在可移动存储中对文件进行操作
*/ using System;
using System.Collections.Generic;
using System.Linq;
using Windows.Storage;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Navigation; namespace Windows10.FileSystem.RemovableDevice
{
public sealed partial class Demo : Page
{
public Demo()
{
this.InitializeComponent();
} protected async override void OnNavigatedTo(NavigationEventArgs e)
{
// 获取全部可移动存储
StorageFolder removableDevices = await KnownFolders.GetFolderForUserAsync(null, KnownFolderId.RemovableDevices);
IReadOnlyList<StorageFolder> folderList = await removableDevices.GetFoldersAsync();
listBox.ItemsSource = folderList.Select(p => p.Name).ToList(); base.OnNavigatedTo(e);
} private async void listBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
// 用户选中的可移动存储
string folderName = (string)listBox.SelectedItem;
StorageFolder removableDevices = await KnownFolders.GetFolderForUserAsync(null, KnownFolderId.RemovableDevices);
StorageFolder storageFolder = await removableDevices.GetFolderAsync(folderName); // 用户选中的可移动存储中的根目录下的文件和文件夹总数
IReadOnlyList<IStorageItem> storageItems = await storageFolder.GetItemsAsync();
lblMsg.Text = "items count: " + storageItems.Count;
} private async void btnCopyFile_Click(object sender, RoutedEventArgs e)
{
// 用户选中的可移动存储
string folderName = (string)listBox.SelectedItem; if (folderName != null)
{
StorageFolder removableDevices = await KnownFolders.GetFolderForUserAsync(null, KnownFolderId.RemovableDevices);
StorageFolder storageFolder = await removableDevices.GetFolderAsync(folderName); // 复制包内文件到指定的可移动存储
StorageFile storageFile = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Assets/hololens.jpg"));
try
{
await storageFile.CopyAsync(storageFolder, "hololens.jpg", NameCollisionOption.ReplaceExisting);
lblMsg.Text = "复制成功";
}
catch (Exception ex)
{
lblMsg.Text = ex.ToString();
}
}
}
}
}
3、演示如何 添加/删除 “库”所包含的文件夹
FileSystem/StorageLibrary/StorageLibraryDemo.xaml
<Page
x:Class="Windows10.FileSystem.StorageLibrary.StorageLibraryDemo"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Windows10.FileSystem.StorageLibrary"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"> <Grid Background="Transparent"> <StackPanel Margin="10 0 10 10"> <TextBlock Name="lblMsg" Margin="5" /> <Button Name="btnAddFolder" Content="增加一个文件夹引用到图片库" Click="btnAddFolder_Click" Margin="5" /> <Button Name="btnRemoveFolder" Content="从图片库移除之前添加的全部文件夹引用" Click="btnRemoveFolder_Click" Margin="5" /> </StackPanel>
</Grid>
</Page>
FileSystem/StorageLibrary/StorageLibraryDemo.xaml.cs
/*
* 演示如何 添加/删除 “库”所包含的文件夹
*
* StorageLibrary - 用于“库”管理
* GetLibraryForUserAsync(User user, KnownLibraryId libraryId) - 获取指定用户的指定“库”,返回 StorageLibrary 类型的对象
* user - 指定用户,传 null 则为当前用户(关于 User 相关请参见 /UserAndAccount/UserInfo.xaml)
* libraryId - 指定库目录,一个 KnownLibraryId 类型的枚举值(Music, Pictures, Videos, Documents)
* Folders - 当前库所包含的文件夹们
* SaveFolder - 当前库的默认文件夹
* RequestAddFolderAsync() - 添加文件夹到当前库
* RequestRemoveFolderAsync() - 从当前库移除指定的文件夹
* DefinitionChanged - 当前库所包含的文件夹发生变化时触发的事件
*
*
* 注:根据需要请在 Package.appxmanifest 中配置 <Capability Name="picturesLibrary" />, <Capability Name="videosLibrary" />, <Capability Name="musicLibrary" />, <Capability Name="documentsLibrary" />
*/ using System;
using System.Collections.Generic;
using Windows.Storage;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Navigation; namespace Windows10.FileSystem.StorageLibrary
{
public sealed partial class StorageLibraryDemo : Page
{
// 临时保存添加进图片库的文件夹
private List<StorageFolder> _addedFloders = new List<StorageFolder>(); public StorageLibraryDemo()
{
this.InitializeComponent();
} protected async override void OnNavigatedTo(NavigationEventArgs e)
{
// 注意:要想访问图片库,别忘了增加 <Capability Name="picturesLibrary" /> // 获取图片库的 StorageLibrary 对象
Windows.Storage.StorageLibrary picturesLibrary = await Windows.Storage.StorageLibrary.GetLibraryForUserAsync(null, KnownLibraryId.Pictures); // 当前库所包含的文件夹增多或减少时
picturesLibrary.DefinitionChanged += async (Windows.Storage.StorageLibrary innerSender, object innerEvent) =>
{
await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
{
lblMsg.Text = "图片库所包含的文件夹如下:";
foreach (StorageFolder folder in picturesLibrary.Folders) // 当前库所包含的全部文件夹
{
lblMsg.Text += Environment.NewLine;
lblMsg.Text += folder.Path;
}
});
}; base.OnNavigatedTo(e);
} // 增加一个文件夹引用到图片库
private async void btnAddFolder_Click(object sender, RoutedEventArgs e)
{
Windows.Storage.StorageLibrary picturesLibrary = await Windows.Storage.StorageLibrary.GetLibraryAsync(KnownLibraryId.Pictures); // 弹出文件夹选择器,以选择需要添加到图片库的文件夹
StorageFolder addedFolder = await picturesLibrary.RequestAddFolderAsync();
if (addedFolder != null)
{
// 添加成功
_addedFloders.Add(addedFolder);
}
else
{ }
} // 从图片库移除之前添加的全部文件夹引用
private async void btnRemoveFolder_Click(object sender, RoutedEventArgs e)
{
Windows.Storage.StorageLibrary picturesLibrary = await Windows.Storage.StorageLibrary.GetLibraryAsync(KnownLibraryId.Pictures); foreach (StorageFolder folder in _addedFloders)
{
// 从图片库移除指定的文件夹引用
if (await picturesLibrary.RequestRemoveFolderAsync(folder))
{
// 移除成功
}
else
{ }
}
}
}
}
OK
[源码下载]
背水一战 Windows 10 (90) - 文件系统: 获取 Package 中的文件, 可移动存储中的文件操作, “库”管理的更多相关文章
- 背水一战 Windows 10 (85) - 文件系统: 获取文件夹和文件, 分组文件夹, 排序过滤文件夹和文件, 搜索文件
[源码下载] 背水一战 Windows 10 (85) - 文件系统: 获取文件夹和文件, 分组文件夹, 排序过滤文件夹和文件, 搜索文件 作者:webabcd 介绍背水一战 Windows 10 之 ...
- 背水一战 Windows 10 (87) - 文件系统: 获取文件的属性, 修改文件的属性, 获取文件的缩略图
[源码下载] 背水一战 Windows 10 (87) - 文件系统: 获取文件的属性, 修改文件的属性, 获取文件的缩略图 作者:webabcd 介绍背水一战 Windows 10 之 文件系统 获 ...
- 背水一战 Windows 10 (86) - 文件系统: 获取文件夹的属性, 获取文件夹的缩略图
[源码下载] 背水一战 Windows 10 (86) - 文件系统: 获取文件夹的属性, 获取文件夹的缩略图 作者:webabcd 介绍背水一战 Windows 10 之 文件系统 获取文件夹的属性 ...
- 背水一战 Windows 10 (91) - 文件系统: Application Data 中的文件操作, Application Data 中的“设置”操作, 通过 uri 引用 Application Data 中的媒体
[源码下载] 背水一战 Windows 10 (91) - 文件系统: Application Data 中的文件操作, Application Data 中的“设置”操作, 通过 uri 引用 Ap ...
- 背水一战 Windows 10 (92) - 文件系统: 读写“最近访问列表”和“未来访问列表”, 管理以及使用索引
[源码下载] 背水一战 Windows 10 (92) - 文件系统: 读写“最近访问列表”和“未来访问列表”, 管理以及使用索引 作者:webabcd 介绍背水一战 Windows 10 之 文件系 ...
- 背水一战 Windows 10 (89) - 文件系统: 读写文本数据, 读写二进制数据, 读写流数据
[源码下载] 背水一战 Windows 10 (89) - 文件系统: 读写文本数据, 读写二进制数据, 读写流数据 作者:webabcd 介绍背水一战 Windows 10 之 文件系统 读写文本数 ...
- 背水一战 Windows 10 (88) - 文件系统: 操作文件夹和文件
[源码下载] 背水一战 Windows 10 (88) - 文件系统: 操作文件夹和文件 作者:webabcd 介绍背水一战 Windows 10 之 文件系统 创建文件夹,重命名文件夹,删除文件夹, ...
- 背水一战 Windows 10 (4) - UI: 多窗口
[源码下载] 背水一战 Windows 10 (4) - UI: 多窗口 作者:webabcd 介绍背水一战 Windows 10 之 UI 多窗口 示例1.自定义帮助类,用于简化 Secondary ...
- 背水一战 Windows 10 (76) - 控件(控件基类): Control - 基础知识, 焦点相关, 运行时获取 ControlTemplate 和 DataTemplate 中的元素
[源码下载] 背水一战 Windows 10 (76) - 控件(控件基类): Control - 基础知识, 焦点相关, 运行时获取 ControlTemplate 和 DataTemplate 中 ...
随机推荐
- 32. linux下oracle数据库定时备份
这里以oradatabak.sh(里面的内容要根据实际修改)脚本放在/u01/11g/datapump下为例: #1.添加脚本执行权限 chmod +x /u01/11g/datapump/orada ...
- __get__ __set__ __delete__描述符
描述符就是一个新式类,这个类至少要实现__get__ __set__ __delete__方法中的一种class Foo: def __get__(self, instance, owner): pr ...
- Python代码教你批量将PDF转为Word
很多时候在学习时发现许多文档都是PDF格式,PDF格式却不利于学习使用,因此需要将PDF转换为Word文件,但或许你从网上下载了很多软件,但只能转换前五页(如WPS等),要不就是需要收费,那有没有免费 ...
- IDEA使用SpringBoot 、maven创建微服务的简单过程
使用IDEA新建一个简单的微服务 1. 打开IDEA,File -> New -> project 打开如下图1-1所示的对话框 图 1-1 2.点击"Next"按钮 ...
- typedef typename
所以根据上述两条分析, typedef typename RefBase::weakref_type weakref_type; 语句的真是面目是: typedef创建了存在类型的别名,而typen ...
- 查找单链表中倒数第K个位置上的结点,若查找成功返回该节点的data域,若不成功只返回0
算法的基本设计思想:定义两个指针变量p和q 初始时均指向头结点的下一个结点(即链表的第一个结点)p沿链表移动,当p移动到第k个结点时,q指针开始与p指针同时移动,当p指针移动到最后一个结点时,q指针 ...
- spark快速开发之scala基础之5高阶函数,偏函数,闭包
高阶函数 高阶函数就是将函数作为参数或者返回值的函数. object function { def main(args: Array[String]): Unit = { println(test(f ...
- HDU-1260.Tickets(简单线性DP)
本题大意:排队排票,每个人只能自己单独购买或者和后面的人一起购买,给出k个人单独购买和合买所花费的时间,让你计算出k个人总共花费的时间,然后再稍作处理就可得到答案,具体格式看题意. 本题思路:简单dp ...
- 设置textfield 文字左边距
默认情况下,当向textField输入文字时,文字会紧贴在textField左边框上.我们可以通过设置textField的leftView,设置一个只有宽度的leftView.这样还不够,因为默认le ...
- 批量屏蔽符合条件的IP地址《目前仅测Centos 6 版本》
使用办法:可以将下面的sh保存到一个单独的文件中,比如ipad.sh,然后再编辑获取IP地址列表中的那段.最终的结果是需要直接获取到IP地址,一行一个,可以有多个文件,一行一个,进行重定向到指定的IP ...