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数据库,用来保存需要长时间保存的数据.本文将通过几个具体的小实例来讲解这三种方式的具体实现. 数据存 ...
随机推荐
- centos 命令行修改主机名
# vi /etc/sysconfig/network # 把localhost.localdomain 修改为 localhost.com # 保存退出 # vi /etc/hosts # 把loc ...
- 求第N个回文数 模板
备忘. /*看到n可以取到2*10^9.说明普通方法一个个暴力计算肯定会超时的,那打表呢?打表我们要先写个打表的代码,这里不提供.打完表观察数据,我们会发现数据其实是有规律的.完全不需要暴力的把所有数 ...
- android 屏幕显示
一.像素 android 常用单位 px.dp.sp dp和sp只与屏幕的物理尺寸有关 dp和sp的区别: sp会随着系统字体的大小而改变,通常用来设置字体大小.dp不会随系统设置的字体改变 dp和p ...
- AMQ学习笔记 - 03. 消息的接收方式
概述 消息有两种接收方式:同步接收和异步接收. 同步接收:主线程阻塞式等待下一个消息的到来,可以设置timeout,超时则返回null. 异步接收:主线程设置MessageListener,然后继续做 ...
- 37、Django实战第37天:404以及500页面配置
1.把404.html,500.html复制到templates下,替换静态文件路径 2.编辑users.views.py定义404,505函数 from django.shortcuts impor ...
- 浅析module.exports和exports区别和使用
module.exports和exports 写node的时候,特别是自定义模块的时候,都是一顿乱敲,然后module.exports={}完事. 但有时候去看别人写的代码的时候会发现还可以expor ...
- python3中zipfile模块的常用方法
一.zipfile模块的简述 zipfile是python里用来做zip格式编码的压缩和解压缩的,由于是很常见的zip格式,所以这个模块使用频率也是比较高的, 在这里对zipfile的使用方法做一些记 ...
- 使用jmatio读写matlab数据文件
/** * Created by hfz on 2016/2/23. */ import com.jmatio.io.*; import com.jmatio.types.MLDouble; impo ...
- 让旧的的Mac也能免费安装keynote
苹果在美国时间9月10日上午10时,将免费iworks. 听到此消息,我心情激动. 立马升级了操作系统 . 然后搜索keynote ,发现还是收费的. 非常郁闷.. 上网上了解,有如下说明: 20 ...
- linux & windows 共享 smbd 部署
smbd : yum install samba samba-client samba-swat mount.cifs : yum -y install cifs-utils ##挂载nas 文 ...