2011-02-27 7 views
0

私はwindowsFormとUserControlを使っていくつかの図を描くこのアプリケーションを持っています。私が完了した後、私はそれらを保存したい、または私が以前作成した既存のファイルを開き、ダイアグラムで作業を続けたいと思う。だから、保存して開くダイアログファイルを使用して、ダイアグラムを保存または開くことができます。winFormsでファイルを保存して開くにはどうしたらいいですか?


EDIT:

が、これは私が持っているものです。

//save the object to the file 

    public bool ObjectToFile(Object model, string FileName) 
    { 
     try 
     { 
      System.IO.MemoryStream _MemoryStream = new System.IO.MemoryStream(); 
      System.Runtime.Serialization.Formatters.Binary.BinaryFormatter _BinaryFormatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(); 
      _BinaryFormatter.Serialize(_MemoryStream, model); 

      byte[] _ByteArray = _MemoryStream.ToArray(); 
      System.IO.FileStream _FileStream = new System.IO.FileStream(FileName,   System.IO.FileMode.Create, System.IO.FileAccess.Write); 
      _FileStream.Write(_ByteArray.ToArray(), 0, _ByteArray.Length); 
      _FileStream.Close(); 

      _MemoryStream.Close(); 
      _MemoryStream.Dispose(); 
      _MemoryStream = null; 
      _ByteArray = null; 

      return true; 

     } 
     catch (Exception _Exception) 
     {   
      Console.WriteLine("Exception caught in process: {0}", _Exception.ToString()); 
     } 
     return false; 

    } 

//load the object from the file 

    public Object FileToObject(string FileName) 
    { 
     try 
     { 
      System.IO.FileStream _FileStream = new System.IO.FileStream(FileName, System.IO.FileMode.Open, System.IO.FileAccess.Read); 
      System.IO.BinaryReader _BinaryReader = new System.IO.BinaryReader(_FileStream); 
      long _TotalBytes = new System.IO.FileInfo(FileName).Length; 
      byte[] _ByteArray = _BinaryReader.ReadBytes((Int32)_TotalBytes); 
      _FileStream.Close(); 
      _FileStream.Dispose(); 
      _FileStream = null; 
      _BinaryReader.Close(); 

      System.IO.MemoryStream _MemoryStream = new System.IO.MemoryStream(_ByteArray); 
      System.Runtime.Serialization.Formatters.Binary.BinaryFormatter _BinaryFormatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(); 
      _MemoryStream.Position = 0; 
      return _BinaryFormatter.Deserialize(_MemoryStream); 

     } 
     catch (Exception _Exception) 
     { 
      Console.WriteLine("Exception caught in process: {0}", _Exception.ToString()); 
     } 
     return null; 
    } 

、今、私はこれをしたいが、私はしようとした場合、それは

public void save() 
    { 
     SaveFileDialog saveFileDialog1 = new SaveFileDialog(); 

     saveFileDialog1.Filter = "txt files (*.txt)|*.txt"; 
     saveFileDialog1.FilterIndex = 2; 
     saveFileDialog1.RestoreDirectory = true; 

     if (saveFileDialog1.ShowDialog() == DialogResult.OK) 
     { 
      if (saveFileDialog1.OpenFile() != null) 
      { 
       ObjectToFile(model, saveFileDialog1.FileName); 
      } 

     } 
    } 

が、働いていませんfileDialogと私はちょうど使用しないで

ObjectToFile(model, "d:\\objects.txt"); 

これは機能します。そして、私は自分の名前でそれを保存したいと思っています。

+0

次回は質問してみてください。 –

答えて

1

SaveFileDialogOpenFileDialogのクラスを確認してください。彼らは非常に類似しており、このように使用することができます実際にあなたのファイルを保存する

using(SaveFileDialog sfd = new SaveFileDialog()) { 
    sfd.Filter = "Text Files|*.txt|All Files|*.*"; 
    if(sfd.ShowDialog() != DialogResult.OK) { 
     return; 
    } 

    ObjectToFile(sfd.FileName); 
} 

メカニックは、この答えの範囲外で、明らかに、です。

編集:あなたの記事の新しい情報を反映するように回答を更新しました。

+0

私は次に何をしなければならないのか分かりません。 sfdはsaveFileDialogです。どのように私はこのsfdに保存するものを置く?どのように私は保存?助けてください –

+0

私はあなたが答えを述べたようにあなたのファイルを保存/ロードする方法を知っているという前提のもとで働いています。私はあなたのデータについて何も知らないので、私は本当にあなたを助けることができません。(とにかく、おそらく別の質問が必要です) –

+0

あなたの新しい情報に基づいて、私は自分の答えを更新しました。あなたの問題は、あなたがファイルを開いているが、後でそれを閉じていないということです。これを処理する最善の方法は、保存するだけです。最初に開く必要はありません。 –

関連する問題