2016-11-16 7 views
0

ユーザー入力を要求するクラスを作成しました(個々のデータの7つのテキストボックス)StreamWriterはクラス全体を保存できますか?

後でStreamWriterクラスを使用してフラットファイルで使用するためにそのデータを保存する必要があります。

フィールドごとに個別のインスタンスを作成する必要がありますか?

private void btnSaveFile_Click(object sender, EventArgs e) { StreamWriter studentInfo = new StreamWriter(txtFirstName.Text); }

または私はそのクラス内のすべてのフィールドを印刷するには、StreamWriterを依頼することができます方法はありますか?私はメソッドをオーバーロードしようとしましたが、明らかにそれはできません。その後、

class Person 
    { 
      public string Name { get; set; } 
      public int Age { get; set; } 
      public Person (string name, int age) { 
       this.Name = name; 
       this.Age = age; 
      } 
      public override string ToString() 
      { 
       return "Person: " + Name + " " + Age; 

      } 

    } 

そして、あなたのクラスを記述します。

+1

テキストボックス値を書いているので、明示的にすべてを指定するか、フォーム上の 'TextBox'型のコントロールをループしてファイルに書き込む必要があります。もう1つのアプローチは、これらの値をオブジェクト、例えば 'UserInformation'にバインドし、そのオブジェクトをxmlまたはjsonにシリアル化することです。そのようにすれば、情報をロードする必要があるときにオブジェクトに簡単に逆シリアル化して戻ることができます。シリアライザはあなたのためにすべての重労働を行います。 – PoweredByOrange

答えて

1

はい、あなたが最初にJSONまたはXMLとしてそれをシリアル化すると、文字列...または最も簡単な方法として、それを得るには...あなたのクラスにToString()メソッドを追加ファイルに書き込むためのインスタンス:

private void btnSaveFile_Click(object sender, EventArgs e) 
{ 
    string mydocpath = ""; // add your path here 
    Person newPerson = new Person ("David", 32); 
    using (StreamWriter studentInfo = new StreamWriter(mydocpath + @"\Student.txt")) { 
     studentInfo.WriteLine(newPerson.ToString()); 
    } 
} 

はあなたが[Serializable]属性を使用してクラスをマークすることができ、これは

+0

これを拡張して、この入力を読むことができるものを書いて、それを最初に使ったフォームに戻す必要があります。私は実際には 'ToString()'を使ってJSONやXMLにシリアライズすることをお勧めします。それははるかに簡単になり、両方の方法で変換がうまく解決されます –

+0

ありがとうございました!私はそれを渦巻にします! – Victor

+0

ありがとうございます。 System.ArgumentNullException {"パスはnullにはなりません。\ r \ nパラメータ名:パス"} – Victor

0

に役立ちます願っています。次に、BinaryFormatterを使用して、クラスをストリームに書き込むことができます。つまり、データが人間が読めるかどうかは問題ではありません。

関連する問題