0

XMLファイルの保存/ロードを含むWindowsフォームがあり、ユーザーに保存/ロードする場所を尋ねます。私の問題は、このメソッドを変更して、streamreaderが指定した場所ではなく、ユーザーが望む場所からファイルをロードする方法がわからないことです。

以下のコードは私のボタンとLoadValuesメソッドのものです。

private void Edittask_loadbuttonClick(
    object sender, EventArgs e)
{
    Stream myStream = null;
    var sFile1 = new OpenFileDialog();

    sFile1.InitialDirectory = "c:\\";
    sFile1.Filter = "xml files (*.xml)|*.xml";
    sFile1.FilterIndex = 2;
    sFile1.RestoreDirectory = true;

    if (sFile1.ShowDialog() == DialogResult.OK)
    {
        try
        {
            if ((myStream = sFile1.OpenFile()) != null)
            {
                using (myStream)
                {
                    var v = LoadValues();
                    this.load_task1_name.Text =
                        v.task1_name;
                    this.load_task1_desc.Text =
                        v.task1_desc;
                    this.load_task1_date.Value =
                        v.task1_date;
                    this.load_checkbox.Checked =
                        v.task1_checkbox;
                }
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(
                "Error: Could not read file from disk. Original error: " +
                ex.Message);
        }
    }
}

public Values LoadValues()
{
    var serializer = new XmlSerializer(typeof (Values));
    using (
        TextReader textReader = new StreamReader(
                                    "E:\\hello.xml")
    )
    {
        return
            (Values) serializer.Deserialize(textReader);
    }
}
4

2 に答える 2

1

OpenFileDialogからLoadValues(...)にストリームを渡し、それを使用してStreamReaderを構築します。

public Values LoadValues(Stream stream)
{
   XmlSerializer serializer = new XmlSerializer(typeof(Values));
   using (TextReader textReader = new StreamReader(stream))
   {
      return (Values)serializer.Deserialize(textReader);
   }
}

if ((myStream = sFile1.OpenFile()) != null)
{
   using (myStream)
   {
      Values v = LoadValues(myStream);
      ...
   }
}
于 2012-05-06T23:27:53.523 に答える
0

Streamをパラメータとして関数に渡す必要があります。

于 2012-05-06T23:27:44.747 に答える