我想更改从嵌入资源加载为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 :(得分:4)
资源不能在运行时修改,部分原因是可执行文件当时正在执行,并且不能对其进行任何写入。您可以使用外部二进制编辑器来修改它们,如果您拥有的只是程序集,或者您可以使用更改的文件重新编译项目。在大多数应用程序平台中,为了打开用于写入或执行的资源,您必须首先从二进制文件中提取文件,然后对其执行操作。你可以把它放回去。
这里有一些关于如何在设计/编译时操纵资源的链接: 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
在这种情况下,您是否考虑使用“设置”而不是资源?它们可以在运行时保存,所以如果你只需要文本值的东西,这应该适合你。