所以我正在编写一个C#应用程序,其中添加了几个XML文件作为资源。我从这些XML文件中读取使用XML序列化来填充代码中的对象,它完美地运行。所以我可以像这样访问文件(我已经留下了一些代码,只有重要的部分):
using TestApp.Properties;
XmlSerializer serializer = new XmlSerializer(typeof(MapTiles));
StringReader sr = new StringReader(Resources.Maps);
mapTiles = (MapTiles)serializer.Deserialize(sr);
然而,现在,我想做相反的事情。我想获取一些数据并将其写入这些XML资源文件。但是,我似乎在这方面遇到了麻烦,并希望有人能看到我弄乱的东西或让我知道我需要做什么?这就是我想要做的事情:
XmlSerializer serializer = new XmlSerializer(typeof(MapTiles));
TextWriter writer = new StreamWriter(Resources.Maps);
serializer.Serialize(writer, tempGroup);
writer.Close();
当我运行此代码时,我在第二行显示错误 ArgumentException未处理 - 空路径名称不合法。
所以,如果有人有任何想法,我会非常感谢一些提示。非常感谢。
答案 0 :(得分:2)
由于您将Resources.Maps
传递给StreamWriter,因此引发了异常。 StreamWriter将其作为字符串处理,并假设它是流的文件路径。但是文件路径是空的,所以它抛出异常。
要修复StreamWriter行,您可以指定本地临时文件而不是Resources.Maps
或使用StringWriter
和默认构造函数,例如new StringWriter()
。
如果您正在编写.resx文件,那么ResXResourceWriter
就是您需要的课程。它也会处理你的流写。请参阅http://msdn.microsoft.com/en-us/library/system.resources.resxresourcewriter.aspx和http://msdn.microsoft.com/en-us/library/ekyft91f.aspx。第二页有关于如何使用该类的示例,但很简单,您可以这样称呼:
XmlSerializer serializer = new XmlSerializer(typeof(MapTiles));
using (StringWriter stringWriter = new StringWriter())
{
serializer.Serialize(stringWriter, tempGroup);
using (ResXResourceWriter resourceWriter = new ResXResourceWriter("~/App_GlobalResources/some_file.resx"))
{
resourceWriter.AddResource("Maps", stringWriter.ToString());
}
}
如果要写出其中包含动态创建资源的程序集,则可以发出新程序集。在这种情况下,请查看http://msdn.microsoft.com/en-us/library/8ye65dh0.aspx。
答案 1 :(得分:0)
StreamWriter构造函数抛出异常,因为Resources.Maps是一个空字符串。
查看MSDN上的文档: http://msdn.microsoft.com/en-us/library/fysy0a4b.aspx
答案 2 :(得分:0)
除非当然有人知道不同。这就是我到目前为止所发现的。感谢那些有一些想法的人,非常感谢。