现代操作系统应用开发:UWP——文件管理(一):KnownFolder

功能简介

我们的UWP程序想要读写本地的文件的时候,往往会遇到权限问题,这里存在着两个解决方法:

第一,电脑上的KnownFolder允许UWP程序直接访问,这篇博客将接受借助KnownFolder读取和保存图片;这里的KnowFolder指的是下面图片中的文件夹:

第二,UWP程序启动时生成的local,temp,roaming(漫游)文件夹,程序对这三个文件夹也具有直接访问权限(可以参考下一篇博客UWP——文件管理(二));

博客的示例程序将使用第一种方法,MainPage里有一个Image控件和一个Button控件,当启动程序的时候,Image控件将会进入KnownFolder中的图片文件夹,选中其中的图片(如示例图的detective978.jpg)初始化Image;点击按钮,会将Image的图片保存在KnownFolder的视频文件夹

实现效果

  • 图片文件夹的内容

  • 启动程序后Image控件读取图片文件夹的内容

  • 点击按钮后Image的图片保存到视频文件夹中

实现过程

设置Package.appxmanifest文件

在解决方案资源管理器中找到Package.appxmanifest文件,点击打开,选择其中的功能,这里可以对UWP应用的各种功能提供权限,我们在图片库和视频库上打勾

在MainPage.xaml添加控件

<!-- MainPage.xaml -->
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <StackPanel>
        <Image x:Name="MyImage" Width="400" Height="600"></Image>
        <Button Content="Save The Image" Click="Button_Click"></Button>
    </StackPanel>
</Grid>

在MainPage.xaml.cs的构造函数上添加代码

//MainPage.xaml.cs
namespace KnownFolderSample
{
    public sealed partial class MainPage : Page
    {
        //用于保存图片
        StorageFile file;
        public MainPage()
        {
            this.InitializeComponent();
            SetImageSource();
        }
        //读取图片库里的图片并赋值给Image
        private async void SetImageSource()
        {
            StorageFolder storageFolder = await KnownFolders.GetFolderForUserAsync(null, KnownFolderId.PicturesLibrary);
            file = await storageFolder.GetFileAsync("detective978.jpg");
            //将图片赋给右侧的Image
            if (file != null)
            {
                BitmapImage bitmap = new BitmapImage();
                using (var stream = await file.OpenAsync(Windows.Storage.FileAccessMode.Read))
                {
                    bitmap.SetSource(stream);
                }
                MyImage.Source = bitmap;
            }
        }

        //点击按钮将图片保存在视频库里
        private async void Button_Click(object sender, RoutedEventArgs e)
        {
            StorageFolder storageFolder = await KnownFolders.GetFolderForUserAsync(null, KnownFolderId.VideosLibrary);
            await file.CopyAsync(storageFolder, "KnownFolder.jpg", NameCollisionOption.ReplaceExisting);
        }
    }
}

总结

整个项目其实是相当简单的,需要注意的地方有两个:

  • 在开始的时候在Package.appxmanifest中提供权限
  • 使用KnownFolders.GetFolderForUserAsync获得文件夹

FYI

项目下载:KnownFolderSample

项目下载之后记住把Debug模式从ARM换成X86或X64(根据你自己的机型选择),之前一开始学习的时候不知道这一点,从网上下载下来的项目都运行不了,纠结的一逼(╥╯^╰╥)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值