【问题标题】:StreamWriter Argument is no legalStreamWriter 参数不合法
【发布时间】:2013-07-04 09:29:35
【问题描述】:

我正在尝试使用 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();
}

然后它说:"Illegal characters in path" on the line :TextWriter textWriter = new StreamWriter(path);

当我静态传递它时,它会使用这种格式,但是当我想动态传递它时,它不接受它。

【问题讨论】:

    标签: c# serialization stream


    【解决方案1】:

    您的路径以@ 符号开始。我不认为你想要它。我怀疑您尝试使用逐字字符串文字,但有点困惑。我怀疑你只是想要:

    var path = string.Format(@"C:\Objects\{0}.xml", aRecord.GetHashCode());
    

    或者,您可以先确定文件名,然后使用 Path.Combine 对其进行 root。

    请注意,在文件名中使用GetHashCode 几乎总是一个坏主意。它不能保证是唯一的,除了作为相等性检查的第一次通过之外,它没有任何实际意义。目前尚不清楚您要达到的目标,但几乎可以肯定这是错误的方法。

    此外,您应该为您的作者使用using 声明:

    using (var writer = File.CreateText(path))
    {
        serializer.Serialize(writer, movie);
    }
    

    【讨论】:

      猜你喜欢
      • 2012-09-10
      • 2021-07-09
      • 2021-05-14
      • 2013-01-19
      • 2014-08-14
      • 2014-06-12
      • 2016-01-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多