2017-02-18 82 views
2

我正在为Android和iOS编写Xamarin.Form PLC,并且有一个地方需要将一些应用程序内容写入文本文件嵌入式资源。我实现了从同一个文本文件中读取成功,与只使用StreamReader的语法相同,但StreamWriter的实施看起来是这样的:Xamarin.Forms中的StreamWriter中的ArgumentException

   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。我正在做一些错误的事情吗?为什么流是可读的但不能使用相同的程序集/资源/流构造写入?

+1

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

回答

2

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

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

1

根据你想写什么,如果它只是像应用程序设置的东西,你可以使用Application.Properties集合http://www.kymphillpotts.com/exploring-xamarin-forms-1-3-properties-dictionary/否则我同意乔恩的答案。

+1

不知道Application.Properties,看起来它会超级有用!在我询问的情况下,这是一个完美的答案! (给予好评)。给乔恩一个绿色的选中标记,因为我需要在某些时候将更多的应用程序设置写入磁盘,尽管我想给你两个接受的答案。 –

+0

谢谢我不介意,很高兴帮助 –