日期:2014-05-17 浏览次数:20698 次
文件的读写对我们来说不应该陌生,而应该说是非常熟悉了。在学习.NET其他开发技术的时候,IO是我们必须学习的,毕竟那是数据存储与处理的最基本操作。
在Windows Store应用程序开发中,同样需要对文件的读写,但由于安全与权限的限制,我们不可能像以前那样“自由干活”了。这是有好处的,我们要知道,“板砖”应用是针对移动平台的,至少通常情况下是这样的。如果我们希望像过去一样可以自由地读写各种路径,那不妨考虑使用传统桌面应用。
其实,什么叫Windows 8应用程序开发,并不仅仅包含Store应用,只要能在Win 8上运行的程序我们都可以说是Windows 8应用,像老套一点的MFC,以前的Windows Form,以及后来的WPF等等都可以并入Windows 8应用。
在商店应用程序中,通常我们要读写的目录有两类,一类是应用程序数据文件夹,另一类是用户的文档库,至于路径,如果你认为ms-appx://和ms-appdata://不好记的话,你可以干脆不记,就算你不知道这种路径表示法也不会影响你写程序的,至于你信不信,反正我深信不疑。
现在,我们拿出文本第一个例子,看看如何利用现有API来访问应用程序的本地数据目录。
第一步,新建一个“板砖”应用项目,这个不用我说了,此处省略38个字。
第二步,布局,MainPage.xaml的XAML如下:
<Page x:Class="App1.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:App1" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"> <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}"> <RichTextBlock Margin="15"> <Paragraph FontSize="24"> <Span>本地存储目录:</Span> <Run x:Name="rnLocal"/> <LineBreak/> <LineBreak/> <Span>漫游存储目录:</Span> <Run x:Name="rnRoaming"/> <LineBreak/> <LineBreak/> <Span>临时目录:</Span> <Run x:Name="rnTemp"/> </Paragraph> </RichTextBlock> </Grid> </Page>
第三步,编写C#代码,尽管外面谣言四起,但我还是很喜欢C#,毕竟谣言起于愚者,止于智者。
protected override void OnNavigatedTo(NavigationEventArgs e) { this.rnLocal.Text = Windows.Storage.ApplicationData.Current.LocalFolder.Path; this.rnRoaming.Text = Windows.Storage.ApplicationData.Current.RoamingFolder.Path; this.rnTemp.Text = Windows.Storage.ApplicationData.Current.TemporaryFolder.Path; }
其实从上面代码中你已经看出,为什么我前面说即使你不记住路径的架构方法也可以轻松访问这些文件夹的原因了。
还是运行一下吧。
从运行结果中我们看到了,这些目录都位于【用户】\\【AppData\\Local】\\【应用程序包名】下面。
接下来拿出本文第二个例子,向本地数据存储区中读写文件。
这玩意儿就相当灵活了,最简单的方法,有两个类可以实现:FileIO和PathIO。
都是静态类,直接调用方法就完事了,这里选择FileIO类来做实验。
第一步,新建一个商店应用项目。
第二步,主页面的XAML如下:
<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}"> <Grid.RowDefinitions> <RowDefinition Height="*"/> <RowDefinition Height="auto"/> <RowDefinition Height="*"/> </Grid.RowDefinitions> <TextBox x:Name="txtInput" Margin="13" Grid.Row="0" TextWrapping="Wrap"/> <StackPanel Orientation="Horizontal" Margin="14,10" Grid.Row="1"> <Button FontFamily="Segoe UI Symbol" FontSize="25" Click="onWrite" > <Button.Content> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="auto"/> <ColumnDefinition Width="*"/> </Grid.ColumnDefinitions> <TextBlock x:Name="tbSob" Grid.Column="0" Text=""/> <TextBlo