In C#, is there a way to add an XML node to a file on disk WITHOUT loading it first?

前端 未结 8 1941
后悔当初
后悔当初 2020-12-20 14:14

I have a very basic XML structure/file on disk which is something like:


    kdkdkdk

        
相关标签:
8条回答
  • 2020-12-20 15:01

    There are a a number of decent answers here already, however just to put another spin on this, are you sure this data needs to be stored as an XML file?

    The data you are storing looks fairly simple (i.e a record with three fields, date, type and some string data. If you do not need any of the added benefits that XML provides (see here) then why not just use basic CSV? That way you can just keep appending to it just like a log file via File.AppendText("filename").

    (Hell, it might even be possible to use something like log4net to manage the logging and any clean up housekeeping.)

    0 讨论(0)
  • 2020-12-20 15:02

    Not with any XML API or tool.

    You could open the file as Text, find the Position of </root> and start overwriting from there. And of course add the </root> again.


    A quick and dirty approach, this is not very robust:

    • make sure you prep the initial file, there should be nothing (no whitespace) after the closing tag
    • make sure you use ASCII or UTF8 encoding

    ====

    string closeTag = "</root>";
    int closeLength = Encoding.UTF8.GetBytes(closeTag).Length;
    
    var fs = System.IO.File.Open(filename, System.IO.FileMode.Open);
    fs.Position = fs.Length - closeLength;
    
    var writer = new StreamWriter(fs);  // after the Position is set
    
    writer.WriteLine(newTag);
    writer.Write(closeTag);  // NOT WriteLine !!
    
    writer.Close();
    fs.Close();
    

    And of course you know about using using() {} blocks.

    0 讨论(0)
提交回复
热议问题