1

我有一个 xml 文件包含一些预定义的名称。当我执行应用程序时,我希望它位于独立存储中。

我知道如何创建和保存数据,IsolatedStorage但如何直观地复制/粘贴现有​​文件?

IsolatedStorageFile isolatedStorage = IsolatedStorageFile.GetUserStoreForApplication();
isolatedStorage.FileExists(filePath)

我认为添加一个文件resources会导致在运行时加载整个文件,我不想要这个。我对吗?

4

2 回答 2

2

如果您想要将文件复制到您自己的设备隔离存储以进行测试,您可以使用Windows Phone IsoStoreSpy。它提供了一个界面,可以查看和修改当前在设备上应用程序的隔离存储中的文件。

如果您想要的只是将您的 xml 文件与您的 xap 一起提供并且不打算修改它,只需将其复制到项目中并将文件的构建操作设置为内容。

最后,如果您想要的是让您的 xml 文件随 xap 一起提供,然后在运行时将其复制到 isostorage 以便您可以修改它,那么您可以按照从此处复制扩展方法并按照说明进行操作。

于 2013-09-20T19:19:56.713 回答
2

从您的问题中,我可以理解您的文件在启动时应该存在于隔离存储中。我要问的是,它将在您的应用程序中获取该文件的位置?

所以显然你需要添加到应用程序资源中。右键单击解决方案资源管理器并添加 xml 文件。将文件绑定从内容更改为资源。

使用以下代码从 xml 文件中获取数据。

StreamResourceInfo strm = Application.GetResourceStream(new Uri("/NewApp;component/Sources/employees.xml", UriKind.Relative));
StreamReader reader = new StreamReader(strm.Stream);
string data = reader.ReadToEnd();

在这段代码中,我假设 NewApp 是我的应用程序名称,并且我将员工 xml 文件保存在我创建的 Sources 文件夹中。我已将 xml 文件的数据读入字符串数据变量。

如果您对将其保存到独立存储非常严格,那么您可以检查存储是否包含此文件,以及是否不将文件添加到存储中,否则您只能从存储中加载它。

using (var storage = IsolatedStorageFile.GetUserStoreForApplication())
        {
            if (storage.FileExists("employees.xml"))
            {
                //Load it
            }
            else
            {
                System.Windows.Resources.StreamResourceInfo strm = Application.GetResourceStream(new Uri("/NewApp;component/Sources/employees.xml", UriKind.Relative));
                System.IO.StreamReader reader = new System.IO.StreamReader(strm.Stream);
                string data = reader.ReadToEnd();
                using (var file = storage.OpenFile("employees.xml", System.IO.FileMode.Create))
                {
                    using (var writer = new System.IO.StreamWriter(file))
                    {
                        writer.WriteLine(data);
                    }
                }
            }
        }
于 2013-09-21T18:42:53.133 回答