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数据库,用来保存需要长时间保存的数据.本文将通过几个具体的小实例来讲解这三种方式的具体实现. 数据存 ...
随机推荐
- AC日记——[SHOI2008]小约翰的游戏John bzoj 1022
1022 思路: nim: 代码: #include <cstdio> #include <cstdlib> #include <iostream> #includ ...
- 记录一次WebService使用的经历
于业务需要,需要和第三方对接一些接口,但是问题是,他们的接口提供是webservice的,本人只精通restful接口(也就是说我比较年轻^-^).好在对面人特别奈斯,一顿指导我,感谢. 废话不多说了 ...
- [libgdx游戏开发教程]使用Libgdx进行游戏开发(11)-高级编程技巧 Box2d和Shader
高级编程技巧只是相对的,其实主要是讲物理模拟和着色器程序的使用. 本章主要讲解利用Box2D并用它来实现萝卜雨,然后是使用单色着色器shader让画面呈现单色状态:http://files.cnblo ...
- COW
COW 时间限制: 1 Sec 内存限制: 64 MB提交: 41 解决: 18[提交][状态][讨论版] 题目描述 Bessie the cow has stumbled across an i ...
- small test on 5.30 night T2
(题面写错了,应该是一条从b -> a 的边) 让我们设状态 (a,b,c) 表示存在一个点k,使得 dist(k,b) - dist(k,a) * 2 + 3 = c,显然这里的第三维可以压 ...
- [Contest20180325]序列
Hogura有一个序列$a$,她希望你帮她维护下面的这些操作. $1\ l\ r\ x$对$l\leq i\leq r$的$a_i$执行$a_i=a_i+x$ $2\ l\ r\ x$对$l\leq ...
- 【Floyd】【Dilworth定理】【最小路径覆盖】【匈牙利算法】bzoj1143 [CTSC2008]祭祀river
Dilworth定理,将最长反链转化为最小链覆盖.//貌似还能把最长上升子序列转化为不上升子序列的个数? floyd传递闭包,将可以重叠的最小链覆盖转化成不可重叠的最小路径覆盖.(引用:这样其实就是相 ...
- 1.3(学习笔记)JSP(Java Server Pages)内置对象
一.内置对象 内置对象又称内建对象.隐式对象,是由服务器自动创建实例化的, 用户在使用时不需要显示的创建,可直接使用. jsp内置对象名称,类型及作用域 Scope代表该内置对象的作用范围,page表 ...
- Problem X: 零起点学算法22——华氏摄氏温度转换
#include<stdio.h> int main() { float f,c; while(scanf("%f",&f)!=EOF) c=*(f-); pr ...
- Java高级架构师(一)第26节:测试并调整登录的业务功能
主Index的处理Java: package com.sishuok.architecture1; import org.springframework.beans.factory.annotatio ...