【问题标题】:Windows Form XML Serialization Save DialogWindows 窗体 XML 序列化保存对话框
【发布时间】:2012-05-12 20:47:23
【问题描述】:

我坚持使用这种愚蠢的形式...这是我的代码。它将它保存在流编写器想要的位置,但是当我通过保存对话框将它保存在用户想要的位置时,它会创建 XML,但不会在其中放入任何内容!有人可以看一下,因为它开始让我发疯了!

void SavebuttonClick(object sender, EventArgs e)
{
    Stream myStream ;
    SaveFileDialog savefile1 = new SaveFileDialog();

    savefile1.Filter = "xml files |*.xml"  ;
    savefile1.FilterIndex = 2 ;
    savefile1.RestoreDirectory = true ;

    if(savefile1.ShowDialog() == DialogResult.OK)
    {
        if((myStream = savefile1.OpenFile()) != null)
        {
            Values v = new Values();
            v.task1_name = this.task1_name.Text;
            v.task1_desc = this.task1_desc.Text;
            v.task1_date = this.task1_date.Value;
            v.task1_time = this.task1_time.Value;
            SaveValues(v);
        }
        myStream.Close();   
    }
}

这是流媒体...

public void SaveValues(Values v)
{
    XmlSerializer serializer = new XmlSerializer(typeof(Values));
    using(TextWriter textWriter = new StreamWriter(@"E:\TheFileYouWantToStore.xml"))
    {
        serializer.Serialize(textWriter, v);
    }
...
}

编辑:

public class Values 
{
public string task1_name { get; set;}
public string task1_desc { get; set;}
public DateTime task1_date { get; set;}
public DateTime task1_time { get; set;}
}

我想这是你的意思的代码,虽然我对编码相当陌生 :(

【问题讨论】:

  • 你可以试试 XmlWriter writer = XmlWriter.Create(@"E:\TheFileYouWantToStore.xml") 吗?并发布 for Values 类。
  • 编辑了我的原帖,谢谢!对文件所做的所有编辑都是将 XML 更改为一行文本,而不是一个格式良好的文件。
  • 这是一个基本错误,SaveValues() 方法需要一个额外的参数,因此您可以传递 myStream
  • 我不确定如何添加这个额外的参数?你必须原谅我,我是编码新手。谢谢!

标签: c# xml windows forms streamwriter


【解决方案1】:

序列化后必须调用textWriter.close();。如果您不关闭 writer,则不会将 chenges 应用于文件。 顺便说一下,您正在将值写入 E:\TheFileYouWantToStore.xml。您的保存方法不使用用户文件。

public void SaveValues(Values v)
{
    XmlSerializer serializer = new XmlSerializer(typeof(Values));
    using(TextWriter textWriter = new StreamWriter(@"E:\TheFileYouWantToStore.xml"))
    {
        serializer.Serialize(textWriter, v);
        textWriter.close();
    }
...
}

编辑:

if(savefile1.ShowDialog() == DialogResult.OK)
{
        Values v = new Values();
        v.task1_name = this.task1_name.Text;
        v.task1_desc = this.task1_desc.Text;
        v.task1_date = this.task1_date.Value;
        v.task1_time = this.task1_time.Value;
        SaveValues(savefile1.FileName, v);
}

-

public void SaveValues(string fileName, Values v)
{
    XmlSerializer serializer = new XmlSerializer(typeof(Values));
    using(TextWriter textWriter = new StreamWriter(fileName))
    {
        serializer.Serialize(textWriter, v);
        textWriter.close();
    }
...
}

【讨论】:

  • 如何将保存方法添加到我的用户文件中?我实际上并不想要 streamwriter 文件...谢谢!
  • 只是你可以将文件名传递给 SaveValues 文件名,我编辑了代码。
  • 当我使用这段代码时,它说它正在被另一个程序使用......我想我错过了一个 Close();某处……
  • 我找不到 -.- 压力很大,你能再帮我一次吗?
  • 请确保保存文件未被使用或已存在。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
  • 2011-07-22
  • 1970-01-01
  • 2013-01-12
  • 1970-01-01
相关资源
最近更新 更多