WP8数据存储--独立存储文件
主要的三个步骤
1.调用手机的独立存储
例如:IsolatedStorageFile storage = IsolatedStorageFile.GetUserStoreForApplication()
2.创建独立存储文件流
例如:IsolatedStorageFileStream location = new IsolatedStorageFileStream(nateText.Text + ".item", System.IO.FileMode.Create, storage);
3.读写该文件流
例如:将独立存储文件流转化为可写流
System.IO.StreamWriter file = new System.IO.StreamWriter(location);
将XML文件保存到流file上,即已经写入到手机独立存储文件上,_doc是用户创建的文件:
_doc.Save(file);
转化为可读流:
System.IO.StreamReader file = new System.IO.StreamReader(location);
解析流,转化为XML
_xml = XElement.Parse(file.ReadToEnd());
下面给出一个购物清单的例子
清单列表界面:
<Grid x:Name="LayoutRoot" Background="Transparent">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions> <!--TitlePanel 包含应用程序的名称和页标题-->
<StackPanel Grid.Row="" Margin="12,17,0,28">
<TextBlock Text="我的应用程序" Style="{StaticResource PhoneTextNormalStyle}"/>
<TextBlock Text="购物清单" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
</StackPanel> <!--ContentPanel - 在此处放置其他内容-->
<Grid x:Name="ContentPanel" Grid.Row="" Margin="12,0,12,0">
<ListBox Margin="0,0,38,131" Name="Files"/>
<Button Content="添加" Name="btn_add" HorizontalAlignment="Left" Height="" Margin="11,493,0,0" VerticalAlignment="Top" Width=""/>
</Grid>
</Grid>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Navigation;
using Microsoft.Phone.Controls;
using Microsoft.Phone.Shell;
using System.IO.IsolatedStorage; namespace PhoneApp1
{
public partial class IsoFiles : PhoneApplicationPage
{
public IsoFiles()
{
InitializeComponent();
BindList();
btn_add.Click += btn_add_Click;
} void btn_add_Click(object sender, RoutedEventArgs e)
{
NavigationService.Navigate(new Uri("/IsoFileAdd.xaml",UriKind.Relative));
} private void BindList()
{
Files.Items.Clear();//先清空一下ListBox数据
//获取应用程序的独立存储文件
using (IsolatedStorageFile storage = IsolatedStorageFile.GetUserStoreForApplication())
{
//获取并循环*.item的存储文件
foreach (string filename in storage.GetFileNames("*.item"))
{
//动态构建一个Grid
Grid grid = new Grid();
//定义第一列
ColumnDefinition co1 = new ColumnDefinition();
GridLength gl = new GridLength();
co1.Width = gl;
grid.ColumnDefinitions.Add(co1);
//定义第二列
ColumnDefinition co2 = new ColumnDefinition();
co2.Width = gl;
grid.ColumnDefinitions.Add(co2);
//添加一个TextBlock显示文件名到第一列
TextBlock tblock = new TextBlock();
tblock.Text = filename;
Grid.SetColumn(tblock, );
//添加一个HyperlinkButton连接到购物详细清单页面,这是第二列
HyperlinkButton hybtn = new HyperlinkButton();
hybtn.Content = "详细信息";
GridLength glth = new GridLength();
hybtn.Width = ;
hybtn.NavigateUri = new Uri("/IsoFilePage.xaml?name="+filename, UriKind.Relative);//传递文件名称到商品详细页面
Grid.SetColumn(hybtn, );
grid.Children.Add(tblock);
grid.Children.Add(hybtn);
Files.Items.Add(grid);
}
}
}
}
}
添加商品界面:
<Grid x:Name="LayoutRoot" Background="Transparent">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions> <!--TitlePanel 包含应用程序的名称和页标题-->
<StackPanel Grid.Row="" Margin="12,17,0,28">
<TextBlock Text="我的应用程序" Style="{StaticResource PhoneTextNormalStyle}"/>
<TextBlock Text="添加商品" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
</StackPanel> <!--ContentPanel - 在此处放置其他内容-->
<Grid x:Name="ContentPanel" Grid.Row="" Margin="12,0,12,0">
<TextBlock HorizontalAlignment="Left" Height="" Margin="23,52,0,0" TextWrapping="Wrap" Text="名称" VerticalAlignment="Top" Width=""/>
<TextBox Name="MC" HorizontalAlignment="Left" Height="" Margin="107,36,0,0" TextWrapping="Wrap" Text="" VerticalAlignment="Top" Width="" FontSize=""/>
<TextBlock HorizontalAlignment="Left" Height="" Margin="23,121,0,0" TextWrapping="Wrap" Text="价格" VerticalAlignment="Top" Width=""/>
<TextBox Name="JG" HorizontalAlignment="Left" Height="" Margin="107,105,0,0" TextWrapping="Wrap" Text="" VerticalAlignment="Top" Width="" FontSize=""/>
<TextBlock HorizontalAlignment="Left" Height="" Margin="23,185,0,0" TextWrapping="Wrap" Text="数量" VerticalAlignment="Top" Width=""/>
<TextBox Name="SL" HorizontalAlignment="Left" Height="" Margin="107,169,0,0" TextWrapping="Wrap" Text="" VerticalAlignment="Top" Width="" FontSize=""/>
<Button Content="保存" Name="btn_add" HorizontalAlignment="Left" Height="" Margin="257,411,0,0" VerticalAlignment="Top" Width=""/> </Grid>
</Grid>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Navigation;
using Microsoft.Phone.Controls;
using Microsoft.Phone.Shell;
using System.IO.IsolatedStorage;
using System.Xml.Linq; namespace PhoneApp1
{
public partial class IsoFileAdd : PhoneApplicationPage
{
public IsoFileAdd()
{
InitializeComponent();
btn_add.Click += btn_add_Click;
} void btn_add_Click(object sender, RoutedEventArgs e)
{
using (IsolatedStorageFile storage = IsolatedStorageFile.GetUserStoreForApplication())
{
XDocument _doc = new XDocument();
XElement _item = new XElement(MC.Text);//创建一个XML元素
XAttribute price = new XAttribute("price", JG.Text);//创建一个XML属性
XAttribute count = new XAttribute("count", SL.Text);
_item.Add(price, count);//将这两个属性添加到XML元素上
//用_item新建一个XML的Linq文档
_doc = new XDocument(new XDeclaration("1.0", "utf-8", "yes"), _item);
//创建一个独立存储的文件流
IsolatedStorageFileStream location = new IsolatedStorageFileStream(MC.Text + ".item", System.IO.FileMode.Create, storage);
//将独立存储文件流转化为可写流
System.IO.StreamWriter file = new System.IO.StreamWriter(location);
//将XML文件保存到file上,即已经写入到手机独立存储文件上
_doc.Save(file);
file.Dispose();//关闭可写流
location.Dispose();//关闭手机独立存储流
//调回清单主页
NavigationService.Navigate(new Uri("/IsoFiles.xaml", UriKind.Relative)); } }
}
}
商品详细界面:
<Grid x:Name="LayoutRoot" Background="Transparent">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions> <!--TitlePanel 包含应用程序的名称和页标题-->
<StackPanel Grid.Row="" Margin="12,17,0,28">
<TextBlock Text="我的应用程序" Style="{StaticResource PhoneTextNormalStyle}"/>
<TextBlock Text="详细信息" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
</StackPanel> <!--ContentPanel - 在此处放置其他内容-->
<Grid x:Name="ContentPanel" Grid.Row="" Margin="12,0,12,0">
<Grid.RowDefinitions>
<RowDefinition Height="63*"/>
<RowDefinition Height="77*"/>
<RowDefinition Height="467*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="5*"/>
<ColumnDefinition Width="19*"/>
</Grid.ColumnDefinitions>
<TextBlock HorizontalAlignment="Left" Height="" Margin="22,11,0,0" TextWrapping="Wrap" Text="名称" VerticalAlignment="Top" Width="" Grid.ColumnSpan=""/>
<TextBlock Name="MC" Grid.Column="" HorizontalAlignment="Left" Height="" Margin="10,11,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width=""/>
<TextBlock HorizontalAlignment="Left" Height="" Margin="22,10,0,0" TextWrapping="Wrap" Text="价格" VerticalAlignment="Top" Width="" Grid.Row="" Grid.ColumnSpan=""/>
<TextBlock x:Name="JG" Grid.Column="" HorizontalAlignment="Left" Height="" Margin="10,10,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="" Grid.Row=""/>
<TextBlock HorizontalAlignment="Left" Height="" Margin="22,10,0,0" TextWrapping="Wrap" Text="数量" VerticalAlignment="Top" Width="" Grid.Row="" Grid.ColumnSpan=""/>
<TextBlock x:Name="SL" Grid.Column="" HorizontalAlignment="Left" Height="" Margin="10,10,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="" Grid.Row=""/>
<Button Content="返回购物清单" Name="btn_back" Grid.Column="" HorizontalAlignment="Left" Height="" Margin="149,379,0,0" Grid.Row="" VerticalAlignment="Top" Width=""/> </Grid>
</Grid>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Navigation;
using Microsoft.Phone.Controls;
using Microsoft.Phone.Shell;
using System.IO.IsolatedStorage;
using System.Xml.Linq; namespace PhoneApp1
{
public partial class IsoFilePage : PhoneApplicationPage
{
public IsoFilePage()
{
InitializeComponent();
btn_back.Click += btn_back_Click;
} void btn_back_Click(object sender, RoutedEventArgs e)
{
NavigationService.Navigate(new Uri("/IsoFiles.xaml", UriKind.Relative));
}
//OnNavigatedTo事件是当跳转到当前的页面的时候触发的
protected override void OnNavigatedTo(NavigationEventArgs e)
{
string itemName = "";
//获取上一页面传过来的item值
bool itemExists = NavigationContext.QueryString.TryGetValue("name", out itemName);
if (itemExists)
{
MC.Text = itemName;
}
using (IsolatedStorageFile storage=IsolatedStorageFile.GetUserStoreForApplication())
{
XElement _xml;//定义Linq的XML元素
//打开独立存储文件
IsolatedStorageFileStream location = new IsolatedStorageFileStream(itemName, System.IO.FileMode.Open, storage);
//转化为可读流
System.IO.StreamReader file = new System.IO.StreamReader(location);
//解析流转化为XML
_xml = XElement.Parse(file.ReadToEnd());
if (_xml.Name.LocalName != null)
{
XAttribute price = _xml.Attribute("price");//获取价格
JG.Text = price.Value.ToLower();
XAttribute count = _xml.Attribute("count");//获取数量
SL.Text = count.Value.ToLower();
MC.Text = itemName;
}
file.Dispose();
location.Dispose();
}
base.OnNavigatedTo(e);
}
}
}
WP8数据存储--独立存储文件的更多相关文章
- wp8数据存储--独立存储文件 【转】
出自 : http://www.cnblogs.com/MyBeN/p/3339019.html 文章篇幅有点大,建议去源网看看 1.调用手机的独立存储 例如:IsolatedStorageFile ...
- WP8数据存储--独立存储设置
<Grid x:Name="LayoutRoot" Background="Transparent"> <Grid.RowDefinition ...
- Android - 数据存储 -存储文件
Android使用的文件系统和其他平台的基本磁盘的文件系统很相似.这里将要介绍如何使用File API在Android文件系统中读写文件. File对象适合按顺序读写大量的数据.例如,适合图片文件或者 ...
- Android - 数据存储 -存储键值对
如果你有少量的键值数据需要存储,可以使用SharedPreferencesAPI.SharedPreferences对象指向一个包含键值对的文件并且提供了一些简单的方法来读取它们.每个SharedPr ...
- WP8 SqlCE和SqlLite数据存储性能比较
在平时的开发中一定会用到本地数据存储,除了独立存储外我们还可以选择SqlCE和SqlLite:于是在选择上我们就必须权衡他们两者的性能择优选择. 测试代码:(这个例子是在msdn sqllite例子上 ...
- wp8.1 Study10:APP数据存储
一.理论 1.App的各种数据在WP哪里的? 下图很好介绍了这个问题.有InstalltionFolder, knownFolder, SD Card... 2.一个App的数据存储概览 主要分两大部 ...
- Android 数据存储五种方式
1.概述 Android提供了5种方式来让用户保存持久化应用程序数据.根据自己的需求来做选择,比如数据是否是应用程序私有的,是否能被其他程序访问,需要多少数据存储空间等,分别是: ① 使用Shared ...
- 【读书笔记《Android游戏编程之从零开始》】20.游戏开发基础(游戏数据存储)
对于数据的存储,Android 提供了4种保存方式. (1)SharedPreference 此方法适用于简单数据的保持,文如其名,属于配置性质的保存,不适合比较大的情况,默认存放在手机内存里 (2) ...
- Android数据存储三剑客——SharedPreferences、File、SQLite
Android中常用的数据存储一般有三种方式:SharedPreferences.文件和SQLite数据库,用来保存需要长时间保存的数据.本文将通过几个具体的小实例来讲解这三种方式的具体实现. 数据存 ...
随机推荐
- HDU 多校1.11
- HDU 2164(模拟)
Rock, Paper, or Scissors? Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Jav ...
- 百度之星资格赛 2016 Problem 1004
本文链接:http://www.cnblogs.com/Ash-ly/p/5494630.html 题意: 熊所居住的 D 国,是一个完全尊重人权的国度.以至于这个国家的所有人命名自己的名字都非常奇怪 ...
- DP(悬线法)【P1169】 [ZJOI2007]棋盘制作
顾z 你没有发现两个字里的blog都不一样嘛 qwq 题目描述-->p1169 棋盘制作 题目大意 给定一个01棋盘,求其中01交错的最大正方形与矩形. 解题思路: 动态规划---悬线法 以下内 ...
- 19、Django实战第19天:课程列表页
从今天开始,我们将完成"公开课"课程的相关功能..... 1.把course-list.html复制到templates目录下 2.这个页面的头部.底部与之前定义的base.htm ...
- sed 概述
sed 是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送 ...
- Oracle like 里面的通配符 以及regexp_like
关于like后面的条件,Oracle提供了四种匹配模式: 1,% :表示任意0个或多个字符.可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示. 比如 SELECT * FR ...
- 【记忆化搜索】bzoj1079 [SCOI2008]着色方案
#include<cstring> #include<cstdio> using namespace std; #define MOD 1000000007 typedef l ...
- FCL研究-LINQ-System.Linq Enumerable
.net 里面集合操作极为方便,尤其是实现了IEnumerable接口的集合,一直在使用,系统的研究一下集合的操作也是极好的. 类型 操作符名称 投影操作符 Select,SelectMany 限制操 ...
- 动态RIP配置路由表
动态RIP配置路由表 以Router11为例子: (1)配置端口ip(两个端口需要设置两个ip) Router(config)#inter f0/0 Router(config-if)#ip add ...