2010-06-08 39 views
8

Cố gắng sắp xếp một xmlDocument vào tập tin. XmlDocument khá lớn; tuy nhiên, trong trình gỡ lỗi tôi có thể thấy rằng thuộc tính InnerXml có tất cả các đốm màu XML trong nó - nó không bị cắt ngắn ở đó.XmlDocument.WriteĐể cắt bớt tập tin kết quả

Dưới đây là đoạn code mà viết đối tượng XmlDocument tôi để file:

// Write that string to a file. 
var fileStream = new FileStream("AdditionalData.xml", FileMode.OpenOrCreate, FileAccess.Write); 
xmlDocument.WriteTo(new XmlTextWriter(fileStream, Encoding.UTF8) {Formatting = Formatting.Indented}); 
fileStream.Close(); 

Các tệp được sản xuất ở đây chỉ viết ra dòng như 5760 - nó thực sự cắt ngắn ở giữa một thẻ!

Bất kỳ ai có bất kỳ ý tưởng nào tại sao điều này sẽ cắt ngắn ở đây?

Cập nhật: Tôi đã tìm thấy nguồn gốc của sự cố. Tôi đã không đóng XML Text Writer trước khi đóng luồng tập tin! D'oh!

Trả lời

7

XmlTextWriter không được đóng đúng cách. Rất tiếc!

+0

Một quy tắc đơn giản để đi qua: "nếu nó là dùng một lần, ai đó ở đâu đó phải vứt bỏ nó" ('Vứt bỏ 'trên các luồng và các nhà văn sẽ tuôn ra và đóng). –

4

Bạn có thể thử Xảy ra luồng trước khi đóng. Nếu AutoFlush là đúng, tôi nghĩ rằng nó được flushed trên Close() anyway, nhưng nó có thể có giá trị một shot:

// Write that string to a file. 
var fileStream = new FileStream("AdditionalData.xml", FileMode.OpenOrCreate, FileAccess.Write); 
xmlDocument.WriteTo(new XmlTextWriter(fileStream, Encoding.UTF8) {Formatting = Formatting.Indented}); 
fileStream.Flush(); 
fileStream.Close(); 
+0

Xin chào Paul, cảm ơn đề xuất. Tôi đã thực sự nghĩ về điều đó (xin lỗi, nên đã gọi nó ra trong bài viết gốc) nhưng tôi đã có kết quả tương tự. Tương tự như vậy, tôi đã thử chuyển đổi mã hóa, nghĩ rằng nó có thể là một loại vấn đề ở đó, không có kết quả. Bất kỳ ý tưởng nào khác? –

1

Đó là cách theo cách ... sau khi câu hỏi ban đầu được hỏi, nhưng nó xuất hiện trên kết quả của Google.

Tôi đã đi qua một cái gì đó tương tự như ngày hôm nay và muốn chia sẻ câu trả lời của tôi (cho linh hồn không may tiếp theo, những người phải đối mặt với sự nhầm lẫn này).

Tôi đang sử dụng StreamWriter (sw) với MemoryStream (mili giây) để lưu dữ liệu trong bộ nhớ và sau đó xả ra một luồng (fs) tại các khoảng nhất định.

Vì vậy, tôi đang làm

sw.WriteLine(DateTime.Now.ToString("u").Replace("Z", "") & ": " & entry) 

Và rồi sau khi tất cả đã được nói và làm

ms.WriteTo(fs) 
    fs.Flush() 
    fs.Close() 
    ms.Close() 

Vấn đề là tôi không được đỏ bừng StreamWriter để MemoryStream đầu tiên

Thay đổi nội dung để điều này giải quyết được vấn đề của tôi.

sw.Flush() 
    ms.WriteTo(fs) 
    fs.Flush() 
    fs.Close() 
    ms.Close() 
1

tôi phải đối mặt với vấn đề này ngày hôm nay khi mã là như sau:

XmlTextWriter writer = new XmlTextWriter("IdP.xml", null); 
writer.Formatting = Formatting.Indented; 
xmlElement.WriteTo(writer); 

Vấn đề này đã được cố định khi tôi thay đổi nó như sau:

using (XmlTextWriter writer = new XmlTextWriter("IdP.xml", null)) 
{ 
    writer.Formatting = Formatting.Indented; 
    xmlElement.WriteTo(writer); 
} 

Hy vọng điều này rất hữu ích cho một ai đó .

Các vấn đề liên quan