Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# XMLSerializer在n行之后创建新文件_C#_Xml_Xmlserializer - Fatal编程技术网

C# XMLSerializer在n行之后创建新文件

C# XMLSerializer在n行之后创建新文件,c#,xml,xmlserializer,C#,Xml,Xmlserializer,我对XMLSerializer有问题: 我有一个列表,希望使用XMLSerializer将列表的内容写入XML。整个过程也很顺利。 但是在n行之后,我想用XMLSerializer将数据写入一个新的XML,但是数据总是写入现有的XML 如何解决在n行之后创建新XML文件的问题 要序列化的代码: private void SaveLogFile() { bf = new BaseFunctions(); try {

我对XMLSerializer有问题: 我有一个列表,希望使用XMLSerializer将列表的内容写入XML。整个过程也很顺利。 但是在n行之后,我想用XMLSerializer将数据写入一个新的XML,但是数据总是写入现有的XML

如何解决在n行之后创建新XML文件的问题

要序列化的代码:

 private void SaveLogFile()
    {
        bf = new BaseFunctions();
        try
        {
            XmlSerializer seri = new XmlSerializer(typeof(List<LVProperties>));
            TextWriter wr = new StreamWriter(FilePath);

            seri.Serialize(wr, FileWatcher.Data);
            wr.Close();
        }
        catch (Exception ex)
        {
            bf.app_Errorhandler(ex);
            return;
        }
    }
 public static List<LVProperties> Data = new List<LVProperties>();
    [STAThread]
    private void LogDataToLV()
    {
        ff = new FileFunctions();
        vlp = new LVProperties();
        bf = new BaseFunctions();

        bf.ReadAppInfos();

        _lvLogMe.Dispatcher.BeginInvoke(new Action(delegate ()
        {

            if (bf.osVersion.Major == 6 && bf.osVersion.Minor >= 2 || bf.osVersion.Major >= 10 && bf.osVersion.Minor >= 0)
            {
                LogMeUser = ff.getFileDetails(LogMePath, LogMeFile, FileFunctions.FileDetailInfo.Title); //Problem mit InvalidCastException!!
                LogMeSize = ff.getFileDetails(LogMePath, LogMeFile, FileFunctions.FileDetailInfo.Size);
            }
            else
            {
                LogMeUser = "not supported by OS";
                LogMeSize = "unknown";
            }
            _lvLogMe.Items.Add(new LVProperties { lv_LogMeDate = LogMeDate, lv_LogMeEvent = LogMeEvent, lv_LogMeFile = LogMeFile, lv_LogMePath = LogMePath, lv_LogMeUser = LogMeUser, lv_LogMeSize = LogMeSize });
            Data.Add(new LVProperties { lv_LogMeDate = LogMeDate, lv_LogMeEvent = LogMeEvent, lv_LogMeFile = LogMeFile, lv_LogMePath = LogMePath, lv_LogMeUser = LogMeUser, lv_LogMeSize = LogMeSize });
            _lvLogMe.SelectedIndex = _lvLogMe.Items.Count - 1;
            _tbLogCount.Text = _lvLogMe.Items.Count.ToString();
            if (VisualTreeHelper.GetChildrenCount(_lvLogMe) > 0)
            {
                Border border = (Border)VisualTreeHelper.GetChild(_lvLogMe, 0);
                ScrollViewer scrollViewer = (ScrollViewer)VisualTreeHelper.GetChild(border, 0);
                scrollViewer.ScrollToBottom();
            }
            _lvLogMe.UpdateLayout();
            _lvLogMe.DataContext = Data;
            LVRowCount = _lvLogMe.Items.Count;

            if (sXML.SaveLogAuto == "true")
            {
                if (LVRowCount == 10)
                {
                    SaveLogFile();
                }
            }

            if (_lvLogMe.Items.Count == 10)
            {
                _lvLogMe.Items.Clear();
                Data.Clear();
            }


        }));
    }
private void SaveLogFile()
{
bf=新的基函数();
尝试
{
XmlSerializer seri=新的XmlSerializer(typeof(List));
TextWriter wr=新的StreamWriter(文件路径);
序列化(wr,FileWatcher.Data);
wr.Close();
}
捕获(例外情况除外)
{
bf.应用程序错误处理程序(ex);
返回;
}
}
为Listview和datatable收集数据以进行序列化的代码:

 private void SaveLogFile()
    {
        bf = new BaseFunctions();
        try
        {
            XmlSerializer seri = new XmlSerializer(typeof(List<LVProperties>));
            TextWriter wr = new StreamWriter(FilePath);

            seri.Serialize(wr, FileWatcher.Data);
            wr.Close();
        }
        catch (Exception ex)
        {
            bf.app_Errorhandler(ex);
            return;
        }
    }
 public static List<LVProperties> Data = new List<LVProperties>();
    [STAThread]
    private void LogDataToLV()
    {
        ff = new FileFunctions();
        vlp = new LVProperties();
        bf = new BaseFunctions();

        bf.ReadAppInfos();

        _lvLogMe.Dispatcher.BeginInvoke(new Action(delegate ()
        {

            if (bf.osVersion.Major == 6 && bf.osVersion.Minor >= 2 || bf.osVersion.Major >= 10 && bf.osVersion.Minor >= 0)
            {
                LogMeUser = ff.getFileDetails(LogMePath, LogMeFile, FileFunctions.FileDetailInfo.Title); //Problem mit InvalidCastException!!
                LogMeSize = ff.getFileDetails(LogMePath, LogMeFile, FileFunctions.FileDetailInfo.Size);
            }
            else
            {
                LogMeUser = "not supported by OS";
                LogMeSize = "unknown";
            }
            _lvLogMe.Items.Add(new LVProperties { lv_LogMeDate = LogMeDate, lv_LogMeEvent = LogMeEvent, lv_LogMeFile = LogMeFile, lv_LogMePath = LogMePath, lv_LogMeUser = LogMeUser, lv_LogMeSize = LogMeSize });
            Data.Add(new LVProperties { lv_LogMeDate = LogMeDate, lv_LogMeEvent = LogMeEvent, lv_LogMeFile = LogMeFile, lv_LogMePath = LogMePath, lv_LogMeUser = LogMeUser, lv_LogMeSize = LogMeSize });
            _lvLogMe.SelectedIndex = _lvLogMe.Items.Count - 1;
            _tbLogCount.Text = _lvLogMe.Items.Count.ToString();
            if (VisualTreeHelper.GetChildrenCount(_lvLogMe) > 0)
            {
                Border border = (Border)VisualTreeHelper.GetChild(_lvLogMe, 0);
                ScrollViewer scrollViewer = (ScrollViewer)VisualTreeHelper.GetChild(border, 0);
                scrollViewer.ScrollToBottom();
            }
            _lvLogMe.UpdateLayout();
            _lvLogMe.DataContext = Data;
            LVRowCount = _lvLogMe.Items.Count;

            if (sXML.SaveLogAuto == "true")
            {
                if (LVRowCount == 10)
                {
                    SaveLogFile();
                }
            }

            if (_lvLogMe.Items.Count == 10)
            {
                _lvLogMe.Items.Clear();
                Data.Clear();
            }


        }));
    }
公共静态列表数据=新列表();
[状态线程]
私有void LogDataToLV()
{
ff=新文件函数();
vlp=新的LVProperties();
bf=新的基函数();
bf.ReadAppInfos();
_lvLogMe.Dispatcher.BeginInvoke(新操作(委托)()
{
如果(bf.osVersion.Major==6&&bf.osVersion.Minor>=2 | | bf.osVersion.Major>=10&&bf.osVersion.Minor>=0)
{
LogMeUser=ff.getFileDetails(LogMePath,LogMeFile,FileFunctions.FileDetailInfo.Title);//问题mit InvalidCastException!!
LogMeSize=ff.getFileDetails(LogMePath、LogMeFile、FileFunctions.FileDetailInfo.Size);
}
其他的
{
LogMeUser=“操作系统不支持”;
LogMeSize=“未知”;
}
_添加(新的LVProperties{lv_LogMeDate=LogMeDate,lv_LogMeEvent=LogMeEvent,lv_LogMeFile=LogMeFile,lv_LogMePath=LogMePath,lv_LogMeUser=LogMeUser,lv_LogMeSize=LogMeSize});
添加(新的LVProperties{lv_LogMeDate=LogMeDate,lv_LogMeEvent=LogMeEvent,lv_LogMeFile=LogMeFile,lv_LogMePath=LogMePath,lv_LogMeUser=LogMeUser,lv_LogMeSize=LogMeSize});
_lvLogMe.SelectedIndex=\u lvLogMe.Items.Count-1;
_tbLogCount.Text=_lvLogMe.Items.Count.ToString();
如果(VisualTreeHelper.GetChildrenCount(_lvLogMe)>0)
{
Border Border=(Border)VisualTreeHelper.GetChild(_lvLogMe,0);
ScrollViewer ScrollViewer=(ScrollViewer)VisualTreeHelper.GetChild(边框,0);
scrollViewer.ScrollToBottom();
}
_lvLogMe.UpdateLayout();
_lvLogMe.DataContext=数据;
LVRowCount=_lvLogMe.Items.Count;
如果(sXML.SaveLogAuto==“true”)
{
如果(LVRowCount==10)
{
SaveLogFile();
}
}
如果(_lvLogMe.Items.Count==10)
{
_lvLogMe.Items.Clear();
Data.Clear();
}
}));
}

XML序列化程序的根目录下不能有数组/列表。因为您有一个列表,所以必须将该列表包装到另一个类中。为了能够移动到xml中的某个位置,您必须使用xml读取器。见下面的代码:

   public class Test
    {
        BaseFunctions bf = new BaseFunctions();
        private void SaveLogFile()
        {
            bf = new BaseFunctions();
            Root root = new Root();
            MemoryStream stream = new MemoryStream();
            try
            {
                XmlSerializer seri = new XmlSerializer(typeof(Root);
                XmlWriterSettings settings = new XmlWriterSettings();
                settings.Indent = true;
                XmlWriter writer = XmlWriter.Create(stream, settings);

                seri.Serialize(writer, root);
                stream.Position = 0;

                XmlReader reader = XmlReader.Create(stream);

                reader.ReadToFollowing("Node");
            }
            catch(Exception ex)
            {
            }
        }
    }
    public class BaseFunctions
    {
    }
    public class Root
    {
        [XmlElement("Properties")]
        List<LVProperties> properties = new List<LVProperties>();
    }
    public class LVProperties
    {
    }
}
公共类测试
{
BaseFunctions bf=新的BaseFunctions();
私有void SaveLogFile()
{
bf=新的基函数();
根=新根();
MemoryStream stream=新的MemoryStream();
尝试
{
XmlSerializer seri=新的XmlSerializer(typeof(Root);
XmlWriterSettings=新的XmlWriterSettings();
settings.Indent=true;
XmlWriter=XmlWriter.Create(流、设置);
序列化(writer,root);
流位置=0;
XmlReader=XmlReader.Create(流);
reader.ReadToFollowing(“节点”);
}
捕获(例外情况除外)
{
}
}
}
公共类基函数
{
}
公共类根
{
[XmlElement(“属性”)]
列表属性=新列表();
}
公共类属性
{
}
}

你也可以发布你的代码吗?谢谢你的回复。如果我有一点时间,我会试试看。。。