C# StreamWriter的论点是不合法的
我试图使用StreamWriter通过方法序列化对象,但不知何故,我无法动态定义文件的路径 例如:C# StreamWriter的论点是不合法的,c#,serialization,stream,C#,Serialization,Stream,我试图使用StreamWriter通过方法序列化对象,但不知何故,我无法动态定义文件的路径 例如: public void SerializeToXML(Record aRecord) { XmlSerializer serializer = new XmlSerializer(typeof(Movie)); var path = string.Format("@\"{0}\\{1}.xml\"", "C:\\Objects", aRecord.GetHashCode()); T
public void SerializeToXML(Record aRecord)
{
XmlSerializer serializer = new XmlSerializer(typeof(Movie));
var path = string.Format("@\"{0}\\{1}.xml\"", "C:\\Objects", aRecord.GetHashCode());
TextWriter textWriter = new StreamWriter(path);
serializer.Serialize(textWriter, movie);
textWriter.Close();
}
然后它在行上显示:“路径中的非法字符”:TextWriter TextWriter=new StreamWriter(路径)代码>
当我静态传递它时,它使用此格式工作,但当我想动态传递它时,它不接受它。您的路径以一个@
符号开始。我想你不想这样。我怀疑您试图使用逐字字符串文字,但有点困惑。我猜你只是想:
var path = string.Format(@"C:\Objects\{0}.xml", aRecord.GetHashCode());
或者,您可以先计算出文件名,然后使用Path.Combine
将其根目录
请注意,在文件名中使用GetHashCode
几乎总是一个坏主意。它不能保证是唯一的,除了作为平等检查的第一次通过之外,它没有任何真正的意义。现在还不清楚你想要实现什么,但这几乎肯定是错误的方法
此外,您应该为您的作者使用using
语句:
using (var writer = File.CreateText(path))
{
serializer.Serialize(writer, movie);
}
您的路径以@
符号开始。我想你不想这样。我怀疑您试图使用逐字字符串文字,但有点困惑。我猜你只是想:
var path = string.Format(@"C:\Objects\{0}.xml", aRecord.GetHashCode());
或者,您可以先计算出文件名,然后使用Path.Combine
将其根目录
请注意,在文件名中使用GetHashCode
几乎总是一个坏主意。它不能保证是唯一的,除了作为平等检查的第一次通过之外,它没有任何真正的意义。现在还不清楚你想要实现什么,但这几乎肯定是错误的方法
此外,您应该为您的作者使用using
语句:
using (var writer = File.CreateText(path))
{
serializer.Serialize(writer, movie);
}