Tôi đã nhận thấy hai cách tiếp cận khác nhau để ghi dữ liệu ra một tệp XML (xử lý lỗi bị bỏ qua cho ngắn gọn).Sử dụng MemoryStream để ghi ra XML
Phương pháp đầu tiên có bạn xây dựng các tài liệu XML và sau đó chỉ cần lưu XML vào một tệp:
using (XmlWriter writer = XmlWriter.Create(fileName))
{
writer.WriteStartDocument(true);
writer.WriteStartElement("parentelement");
writer.WriteEndElement();
writer.WriteEndDocument();
}
Phương pháp thứ hai có bạn tạo một MemoryStream, và sau đó lưu MemoryStream vào một tệp:
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
MemoryStream ms = new MemoryStream();
using (XmlWriter writer = XmlWriter.Create(ms, settings))
{
writer.WriteStartDocument(true);
writer.WriteStartElement("parentelement");
writer.WriteEndElement();
writer.WriteEndDocument();
}
using (FileStream fs = File.Open(fileName, FileMode.Create, FileAccess.Write))
{
ms.WriteTo(fs);
ms.Dispose();
}
Tôi đoán logic để sử dụng MemoryStream là để đảm bảo tệp XML có thể được tạo trước khi cố gắng lưu tệp. Liệu phương thức MemoryStream có cung cấp cho một sự kiện viết Atomic và/hoặc bảo vệ chống lại các vấn đề viết trong khi bạn đang thêm các mục vào tệp XML?
Bất cứ ai có thể giải thích nếu điều này thực sự cần thiết hay chỉ là một cách quá mức để thêm các dòng mã không cần thiết vào dự án của tôi?
Cảm ơn câu trả lời ... Cả hai phương pháp trong câu hỏi của tôi đều hoạt động, không nghi ngờ gì nữa ... Tôi chỉ muốn thử và làm rõ một số việc liệu tôi có nên sử dụng MemoryStream hay không. – Dscoduc
XmlWriter sẽ bảo vệ bạn và thực thi tốt xml được hình thành ngoại trừ: 1) nếu bạn sử dụng WriteDocType hoặc WriteRaw 2) nếu bạn dừng sớm - tức là không đóng tất cả các phần tử vào phần tử gốc ở cuối – ShuggyCoUk
Cảm ơn bạn đã làm rõ ... – Dscoduc