2012-10-17 62 views
0

我想從嵌入式資源更改作爲Stream加載的文件的內容。更改嵌入式資源文件中的內容

以下代碼獲取該文件:

Stream theFile = Assembly.GetExecutingAssembly().GetManifestResourceStream("_3LinksFourmTool.Resources.fourmlinks.txt"); 

我創建的需要文本的字符串,它是存在於所提供的Stream的方法。該字符串被重寫爲Stream與新的內容。

public static void WriteNewTextToFile(string text, Stream theFile) 
{ 

    string fileText = GetAllTextFromFile(theFile); 
    ArrayList fileLIst = populateListFromText(fileText); 

    using (StreamWriter fileWriter = new StreamWriter(theFile)) 
    { 
     fileWriter.Write(""); 
     for (int i = 0; i < fileLIst.Count; i++) 
     { 
      fileWriter.WriteLine(fileLIst[i].ToString());   
     } 
    } 
} 

上面的代碼會拋出System.ArgumentException

這個例外與文本文件是Embedded Resource有什麼關係?

如何在不拋出System.ArgumentException的情況下修改此文件?

+0

我編輯了你的標題。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 –

+0

非常感謝你:) – samy

+0

is fileWriter.Write(「」);應該是fileWriter.Write(文本); ? – GazTheDestroyer

回答

4

資源不能在運行時修改,部分原因是因爲可執行文件正在執行,並且不能寫入它。您可以使用外部二進制編輯器來修改它們,如果您擁有的只是程序集,或者可以使用更改後的文件重新編譯項目。在大多數應用程序平臺中,爲了打開用於寫入或執行的資源,您必須先從二進制文件中提取文件,然後在其上執行操作。你可以;但不要把它放回去。

這裏是關於如何在設計manipluate資源的一些鏈接/編譯時間: http://msdn.microsoft.com/en-us/library/7k989cfy%28v=vs.90%29.aspx http://msdn.microsoft.com/en-us/library/cd818wbk%28v=vs.100%29.aspx

在這種情況下,你有沒有考慮過使用設置,而不是資源?他們可以在運行時保存,所以如果你只需要文本值的東西,這應該適合你。

+0

感謝您的信息,但我不設置filimier。你能給我一個例子或mybee一個usefel鏈接你知道嗎? – samy

+0

這應該對你有所幫助:它是一個..net 2文章,但自那時以來Settings並沒有真正改變。 http://msdn.microsoft.com/en-us/library/aa730869%28v=VS.80%29.aspx。編輯:這是一個特別針對VS 2010:http://msdn.microsoft.com/en-us/library/a65txexh%28v=vs.100%29.aspx –

+0

謝謝你我會試試:) – samy