2012-05-03 8 views
1

私はこの愚かなフォームに固執しています... heres my code。それはストリームライターが望んでいる場所に保存しますが、ユーザーがsaveialogボックスを使用して保存したい場所に保存すると、XMLが作成されますが、何も入れません!それは私を風にし始めているように誰かが見ていることができます!Windowsフォーム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(); 
    } 
} 

これは、StreamWriterのです...

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

EDIT:

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;} 
} 

私は、これはあなたが意図したコードであると推定、仲間かかわらコーディングにかなり新しいイム:(

+0

あなたが試すことができたXmlWriterライター= XmlWriter.Create(@ "E:\ TheFileYouWantToStore.xml")? for Valuesクラスを投稿します。 –

+0

オリジナルの投稿を編集しました、ありがとうございます!ファイル上のすべての編集は、フォーマット済みのファイルではなくXMLを1行のテキストに変更することでした。 –

+0

これは基本的な誤りです。SaveValues()メソッドには、* myStream *を渡すための余分な引数が必要です。 –

答えて

0

シリアライズ後にtextWriter.close();に電話する必要があります。ライターを閉じないと、ファイルにチェンジが適用されません。 ところで、値をE:\ TheFileYouWantToStore.xmlに書き込んでいます。あなたのsave saveメソッドはusersファイルを使用しません。

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(); 
    } 
... 
} 

EDIT:

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(); 
    } 
... 
} 
+0

ユーザーファイルにsaveメソッドを追加するにはどうすればよいですか?私は実際にstreamwriterファイルを望んでいない...ありがとう! –

+0

ファイル名を** SaveValues ** filenameに渡すだけで、コードを編集しました。 –

+0

私はこのコードを使用すると、別のプログラムで使用されていると言います...私はClose();どこかで... –