0

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

静的に渡しているときはこの形式で動作しますが、動的に渡したいときは受け入れません。

4

1 に答える 1

3

あなたの道は@標識から始まります。私はあなたがそれを望んでいないと思います。逐語的な文字列リテラルを使用しようとしていたと思われますが、少し混乱しました。私はあなたがただ欲しいと思う:

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

または、最初にファイル名を調べてから、Path.Combine.

GetHashCodeファイル名で使用することは、ほとんどの場合、悪い考えであることに注意してください。一意であることが保証されているわけではなく、等値チェックの最初のパスとして以外に実際の意味はありません。何を達成しようとしているのかは明確ではありませんが、ほぼ間違いなく間違ったアプローチです。

また、usingライターには次のステートメントを使用する必要があります。

using (var writer = File.CreateText(path))
{
    serializer.Serialize(writer, movie);
}
于 2013-07-04T09:32:06.983 に答える