2017-02-18 86 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

謝謝我不介意,很高興幫助 –