2011-02-27 6 views
0

나는이 응용 프로그램에서 windowsForm 및 UserControl을 사용하여 일부 다이어그램을 그립니다. 완료 후에는 파일을 저장하거나 이전에 만든 기존 파일을 열고 다이어그램 작업을 계속하고 싶습니다. 따라서 저장 및 열기 대화 상자 파일을 사용하여 다이어그램을 저장하거나 열려고합니다.winForms에서 파일을 저장하고 열려면 어떻게해야합니까?


편집 : 나는 시도하는 경우

//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

새로운 정보를 바탕으로 제 답변을 업데이트했습니다. 문제는 파일을 여는 중이지만 이후에 파일을 닫지 않았기 때문입니다. 이것을 처리하는 가장 좋은 방법은 저장하는 것입니다. 먼저 열 필요가 없습니다. –

관련 문제