C# Xamarin.Forms中StreamWriter中的ArgumentException

C# Xamarin.Forms中StreamWriter中的ArgumentException,c#,xamarin,xamarin.forms,C#,Xamarin,Xamarin.forms,我正在为Android和iOS编写一个Xamarin.formPLC,在这里我需要将一些应用程序内容写入一个嵌入资源的文本文件。我已经成功地实现了从同一个文本文件中读取,仅使用StreamReader使用相同的语法,但是StreamWriter实现如下所示: Assembly assembly = GetType().GetTypeInfo().Assembly; string resource = "jetStream.Resul

我正在为Android和iOS编写一个Xamarin.formPLC,在这里我需要将一些应用程序内容写入一个嵌入资源的文本文件。我已经成功地实现了从同一个文本文件中读取,仅使用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上抛出“流不可写”的参数。我是不是做错了什么?为什么流使用相同的程序集/资源/流构造可读但不可写?

来自
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());
}

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

根据您要写入的内容,如果只是应用程序设置之类的内容,您可以使用application.Properties集合,否则我同意Jon的回答。

您正在尝试写入应用程序包中的资源。该包已签名且不可写(在iOS上也是如此)。如果要写入文件,需要选择一个不属于包结构的可写文件夹。不知道Application.Properties,这看起来非常有用!在我所问的情况下,这是一个完美的答案!(向上投票)。给Jon打绿色的复选标记,因为我需要在某个时候将不仅仅是应用程序设置写入磁盘,尽管我想给你们两个接受的答案。