我如何在Windows Phone 8中写入特定位置?

本文关键字:定位 位置 Windows Phone | 更新日期: 2023-09-27 18:01:53

当我按下按钮时,我希望它将文件覆盖到特定文件夹。

我使用以下代码:

private void btnArial_Click(object sender, RoutedEventArgs e)
    {
        string cssDocument = "body{font-family:'"Arial'";}";
        //I want to write file style.css to folder css inside html
        string path = Package.Current.InstalledLocation.Path + "''Html''css''style.css";
        if (File.Exists(path))
        {
            StreamWriter writer = new StreamWriter(path);
            writer.Write(cssDocument);
            writer.Close();
        }
        changeStyle(new FontFamily("Arial"));
    }

当我在模拟器和实际设备上测试时,它工作正常。

但是当我提交应用程序到商店时,它得到了错误-当我按下那个按钮时应用程序退出

我如何在Windows Phone 8中写入特定位置?

安装目录(package . current . installlocation)是一个只读位置。不幸的是,由于Visual Studio优化开发时部署的方式,当应用程序从vs部署时,它被设置为读写,这就是为什么你在将应用程序提交到商店后看到行为的差异。

如果需要修改安装目录中的文件,必须首先将其复制到一个可写的位置。

我更喜欢在WP8中使用隔离存储来写文件,它永远不会失败。你也可以使用Windows。存储api。

    private async void MyButton_Click(object sender, RoutedEventArgs e)
    {
        string cssDocument = "body{font-family:'"Arial'";}";
        // using Windows.Storage
        StorageFolder folder = ApplicationData.Current.LocalFolder;
        folder = await folder.CreateFolderAsync("HTML", CreationCollisionOption.OpenIfExists);
        folder = await folder.CreateFolderAsync("CSS", CreationCollisionOption.OpenIfExists);
        StorageFile file = await folder.CreateFileAsync("style.css", CreationCollisionOption.ReplaceExisting);
        using (var writer = new StreamWriter(await file.OpenStreamForWriteAsync()))
        {
            writer.Write(cssDocument);
        }
        // using using System.IO.IsolatedStorage;
        using (var store = IsolatedStorageFile.GetUserStoreForApplication())
        {
            if (!store.DirectoryExists("HTML/CSS"))
                store.CreateDirectory("HTML/CSS");
            using (var writer = new StreamWriter(store.OpenFile("HTML/CSS/style.css", FileMode.Create)))
            {
                writer.Write(cssDocument);
            }
        }
        changeStyle(new FontFamily("Arial"));
    }

完全正确。在隔离存储中写入文件。它更简单,更直接。这里的文件可以访问,查看,修改,删除,替换在一个非常明确的方式。我个人更喜欢隔离存储。