• Windows Store App 应用程序安装目录


    前面介绍了如何对本地应用存储空间中的文件以及文件夹进行操作,在应用中除了可以对本地应用存储空间进行操作之外,还可以对应用程序安装目录进行相关操作。本节将通过一个示例,详细讲解如何对应用程序安装目录中的文件进行操作,此示例可以实现获取应用程序安装目录下的图片文件并将其显示,还可以实现复制安装目录下的文件。

    Visual Studio 2012中新建一个Windows应用商店的空白应用程序项目,并命名为InstalledLocationApp。双击打开项目的MainPage.xaml文件,在Grid元素中添加如下代码,布局前台界面。

    <StackPanel  HorizontalAlignment="Left" VerticalAlignment="Top" >

        <StackPanel Orientation="Horizontal" >

    <!--添加开始复制按钮-->

            <Button x:Name="CopyFileButton" Click="CopyFile_Click" Content="开始复制" Width="194" Height="63" FontSize="30" Margin="50,50"/>

            <TextBlock x:Name="tbMessage" FontSize="35"  Width="500" Height=" 50" VerticalAlignment="Center"/>

        </StackPanel>

        <StackPanel Orientation="Horizontal" Margin="50,50">

    <!--添加显示图片按钮-->

            <Button x:Name="ViewPictureButton" Click="ViewPictureButton_Click" Content="显示图片" FontSize="30" Width="194" Height="63"></Button>

            <ListView x:Name="ShowPicture" Width="300" Height=" 200">

                <ListView.ItemTemplate>

                    <DataTemplate >

                        <Image  Source="{Binding Uri}"></Image>

                    </DataTemplate>

                </ListView.ItemTemplate>

            </ListView>

        </StackPanel>

    </StackPanel>

    上面的代码为应用添加了两个按钮、一个文本块和一个ListView控件,并在ListView控件中添加了一个Image控件,两个按钮分别为“开始复制”和“显示图片”,其中“开始复制”按钮用来对安装目录中的XML文件进行复制,“显示图片”按钮用于获取安装目录中的图片文件,并将获得的图片在ListViewImage控件中显示。这里通过数据绑定为ListView创建了数据模板,将图片的地址绑定到Image控件,关于数据绑定的介绍请查看相关章节。

    布局了前台界面后,下面介绍后台功能的实现,为了方便对图片进行管理,我们首先在MainPage.xaml.cs文件中创建表示图片的Picture类,并在其中定义代表图片路径的Uri属性。代码如下所示:

    public class Picture

    {

        public String Uri { get; set; }

    }

    接下来将陆续实现“开始复制”和“显示图片”按钮的功能,分别为按钮添加实现其功能的单击事件处理方法,首先来看“显示图片”按钮,实现其功能的单击事件处理方法ViewPictureButton_Click如下所示。

    async private void ViewPictureButton_Click(object sender, RoutedEventArgs e)

    {

        List<Picture> pictureList = new List<Picture>();

    //获得picture文件夹

        StorageFolder folder = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFolderAsync("picture");

        IReadOnlyCollection<StorageFile> files = await folder.GetFilesAsync();

    //获得图片

        foreach (StorageFile file in files)

        {

            pictureList.Add(new Picture { Uri = "picture/" + file.Name });

        }

        ShowPicture.ItemsSource = pictureList;

    }

    方法首先创建了一个List集合pictureList,然后使用GetFolderAsync获得安装目录中的picture文件夹,通过GetFilesAsync方法异步获取文件夹中的图片,并将获得的图片保存在只读集合files中,使用foreach循环遍历files,调用Add方法将其中保存的图片添加到集合pictureList里面,最后将pictureList绑定到ListView中。

    现在已经实现了“显示图片”按钮的功能,不过在运行程序之前还需要做一些必要的准备工作,由于这里显示的是应用程序安装目录中picture文件夹下的图片文件,而创建项目时默认是没有picture文件夹的,因此需要在项目的解决方案资源管理器中新建一个picture文件夹,并在文件中放入一些图片文件。

    完成上面的准备工作之后,按F5键运行程序,单击“显示图片”按钮,界面的显示效果如图13-2所示。


    13-2 显示图片

    接下来继续来实现“开始复制”按钮的功能,实现按钮功能的单击事件处理方法如下所示。

    async private void CopyFile_Click(object sender, RoutedEventArgs e)

    {

        //获取应用程序安装目录下名为Model的文件夹

        StorageFolder copyFolder = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFolderAsync("Model");

        //获取Model文件夹下名为“word.xml”的文件

        StorageFile copyFile = await copyFolder.GetFileAsync("word.xml");

        //读取文件内容

        IBuffer buffer = await FileIO.ReadBufferAsync(copyFile);

        //在本地应用存储空间中新建一个名为“word.xml”的文件

        StorageFile file = await ApplicationData.Current.LocalFolder.CreateFileAsync("word.xml", CreationCollisionOption.OpenIfExists);

        //读取的内容写入该文件中

        await FileIO.WriteBufferAsync(file, buffer);

        tbMessage.Text = "复制文件成功!";

    }

    代码使用异步方法GetFolderAsync获得安装目录下名为Model的文件夹,通过GetFileAsync方法获取其中的word.xml文件,并使用StorageFile类型的copyFile将其保存,以copyFile为参数调用FileIO类的ReadBufferAsync方法异步读取word.xml文件中的内容,接着通过CreateFileAsync方法在本地应用存储空间中新建一个名为word.xml的文件,最后使用FileIO类的WriteBufferAsync方法将读取到的内容写入到新建的word.xml文件中。

    这样就实现了“开始复制”按钮的功能,与上面的情况一样,在运行程序之前需要在项目的解决方案资源管理器中新建一个Model文件夹,并在文件中放入一个word.xml文件。

    完成准备工作之后,按F5键运行程序,单击“开始复制”按钮,界面的显示效果如图13-3所示。


    13-3 复制成功提示信息

    这时定位到本地应用存储空间,会发现word.xml文件已经复制到其中。

  • 相关阅读:
    poj1830 开关问题
    poj1681 Painter's Problem
    poj1222 EXTENDED LIGHTS OUT
    bzoj1923 [Sdoi2010]外星千足虫
    bzoj1013 [JSOI2008]球形空间产生器sphere
    poj2888 Magic Bracelet
    poj2409 Let it Bead
    poj1286 Necklace of Beads
    bzoj1004 HNOI2008 Cards
    bzoj2040 [2009国家集训队]拯救Protoss的故乡
  • 原文地址:https://www.cnblogs.com/finehappy/p/4213344.html
Copyright © 2020-2023  润新知