【问题标题】:ArgumentException in StreamWriter in Xamarin.FormsXamarin.Forms 中 StreamWriter 中的 ArgumentException
【发布时间】:2017-02-18 15:26:39
【问题描述】:

我正在为 Android 和 iOS 编写 Xamarin.Form PLC,并且有一个地方我需要将一些应用程序内容写入文本文件嵌入式资源。我已经成功地实现了从同一个文本文件中读取,仅使用 StreamReader 具有相同的语法,但 StreamWriter 实现如下所示:

                Assembly assembly = GetType().GetTypeInfo().Assembly;
                string resource = "jetStream.Results.settings.txt";
                using (Stream stream = assembly.GetManifestResourceStream(resource)) {
                    using (StreamWriter writer = new StreamWriter(stream)) {
                       //do stuff
                    }
                }

StreamWriter 在 System.IO.StreamWriter 中抛出“Stream is not writeable”的参数。我在做一些明显错误的事情吗?为什么使用相同的程序集/资源/流构造,Stream 可读但不可写?

【问题讨论】:

  • 您正在尝试写入应用程序包内的资源。该包已签名且不可写(在 iOS 上也是如此)。如果要写入文件,则需要选择不属于包结构的可写文件夹。

标签: c# xamarin xamarin.forms


【解决方案1】:

来自GetManifestResourceStream 的流不可写。流的文件在构建时嵌入到程序集中,无法更改。您必须先将文件写入磁盘,然后才能对其进行写入。

string resource = "jetStream.Results.settings.txt";
using (Stream stream = assembly.GetManifestResourceStream(resource))
using (var fs = new FileStream(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal)), FileMode.Create, FileAccess.Write))
using (var stream = new MemoryStream())
using (var writer = new StreamWriter(fs))
{
    rStream.Stream.CopyTo(stream);
    writer.Write(stream.ToArray());
}

在此之后,您可以读取和写入磁盘上的文件。

【讨论】:

    【解决方案2】:

    根据你想写的内容,如果只是应用程序设置之类的东西,你可以使用 Application.Properties 集合http://www.kymphillpotts.com/exploring-xamarin-forms-1-3-properties-dictionary/ 否则我同意 Jon 的回答。

    【讨论】:

    • 不知道 Application.Properties,这看起来会非常有用!在我问的情况下,这是完美的答案! (赞成)。给 Jon 打上绿色复选标记,因为在某些时候我需要将不仅仅是应用程序设置写入磁盘,尽管我想给你们两个都接受的答案。
    猜你喜欢
    • 2015-10-19
    • 2018-02-17
    • 2018-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-03
    相关资源
    最近更新 更多