2010-09-11 114 views
4

我正在使用Windows Phone 7应用程序,在那里我将使用bing地图显示ATM的位置。将文件从Visual Studio添加到WP7隔离存储?

我有一个地址和gps坐标的xml文件。但是,如何将这个文件从Visual Studio添加到我的程序中?如果我将BuildAction设置为“内容”并将“复制到输出目录”设置为“始终复制”该文件仍然不在IsolatedStorage中。我必须建立一个机制来从网上下载信息吗?还是有另一种方式?

回答

2

您不能在设计时直接将文件传递到独立存储。只有当应用程序正在运行时。

我仍然建议通过Web服务将文件传递给应用程序。主要是因为如果最终您需要更改XML的内容,则需要更新该应用程序。

我会做的只是创建一个WCF服务,该服务将通过简单的HTTP请求返回序列化的数据(或现有的XML)。

+0

混合方法将是最好的。如果你去网络,只要没有网络,应用程序根本不会做任何事情...... – 2010-09-12 21:43:28

+0

这真的取决于应用程序的功能。在这种情况下,应用程序仍然需要Bing Maps。因此,如果没有活跃的互联网连接,它将无法正常工作。因此,这里仅限于网络的方法是适当的。 – 2010-09-12 22:02:28

+0

我下载列表的问题是它目前有940kb。它可能会随着时间的推移而增长。这意味着您第一次运行应用程序时,它会下载相当大的数据。所以我想我会在应用程序中存储一个初始列表,然后下载更新。客户可能会喜欢这一点。 – 2010-09-13 08:05:10

4

作为Visual Studio项目中的内容列出的文件被复制到生成的XAP文件(类似于ZIP文件)。它们不会复制到独立存储。

在一个XML文件的情况下,你可以调用XmlReader.Create与文件路径作为参数,如下所示:

using (XmlReader reader = XmlReader.Create("path/to/file.xml")) 
{ 
    // read XML file here 
} 

或者,您也可以拨打Application.GetResourceStream和使用返回StreamResourceInfoStream财产object:

StreamResourceInfo sri = Application.GetResourceStream(
    new Uri("path/to/file.xml", UriKind.Relative)); 
// read XML file here from sri.Stream, e.g. using a StreamReader object 
+0

如果文件是来自引用项目或程序集的内容,该怎么办?我找不到使用Application.GetResourceStream或相对Pack URI格式访问它的方法... – 2010-10-18 02:47:24

1

的“芒果” SDK附带ISETool,可以采取和恢复应用程序的独立存储的快照/从本地目录:

# Copy data from IS to directory 
ISETool.exe ts xd <PRODUCT-ID> "C:\TempDirectory\IsolatedStore" 

# Copy data from IS to directory 
ISETool.exe rs xd <PRODUCT-ID> "C:\TempDirectory\IsolatedStore" 

如果你不希望覆盖整个IS,该工具支持用于指定备份/恢复子目录的选项(device-folder)。