次の静的メソッドを持つShipmentというクラスを作成しました。
public static void WriteShipment(Shipment s, string path)
{
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
settings.IndentChars = "\t";
XmlWriter w = XmlWriter.Create(path, settings);
w.WriteStartDocument();
w.WriteStartElement("Shipment");
w.WriteStartElement("id");
w.WriteString(s.id);
w.WriteEndElement();
Address.WriteAddress(s.from, path);
Address.WriteAddress(s.to, path);
Date.WriteDate(s.receiveDate, path);
Date.WriteDate(s.deliverDate, path);
w.WriteStartElement("sum");
w.WriteValue(s.sum);
w.WriteEndElement();
w.WriteStartElement("currency");
w.WriteString(s.currency);
w.WriteEndElement();
w.WriteStartElement("paid");
w.WriteValue(s.paid);
w.WriteEndElement();
w.WriteEndElement();
w.WriteEndDocument();
w.Close();
}
Shipment
クラスのインスタンスを受け取り、その詳細を含むXMLファイルを作成するメソッドを作成しようとしています。
ShipmentのフィールドのいくつかはタイプAddress
とでありDate
、これらは私が作成した他のクラスです。また、パラメーターとして受け取ったインスタンスの詳細をXMLファイルに書き込む静的メソッドもあります。
WriteAddress
そしてWriteDate
方法は完璧に動作しますが、私は内部でそれらを起動しようとするWriteShipment
方法で、私は、実行時に次の例外を取得します-
「別のプロセスによって使用されているため、プロセスはファイルにアクセスできません」
WriteAddress
とWriteDate
がWriteShipment
すでに書き込んでいる同じファイルに書き込もうとしているために発生することがわかりました(すべて同じパスを共有しているため)。
これを克服する方法はありますか?私が試した他の解決策は、無駄であるか、他の問題を引き起こしたことが証明されました。
表示されている問題は、WriteAddress
とWriteDate
メソッドがすでに開かれているファイルを開こうとしていることが原因である可能性があります。
を呼び出すとXmlWriter.Create
、ファイルは「ロック」され、w
変数を使用してのみ書き込むことができ、を呼び出すまでロックされたままになりますw.Close()
。
最良のオプションは、w
変数を引数としてWriteAddress
andWriteDate
メソッドに渡し、それをファイルに書き込むことです。
また、提案として、コードをusingブロックに配置することを検討してください。そうすれば、いずれかのメソッドが例外をスローした場合でも、ファイルがロックされたままになることはありません。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加