C# 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

我试图使用StreamWriter通过方法序列化对象,但不知何故,我无法动态定义文件的路径

例如:

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);
}