2017-02-28 3 views
0

내 프로젝트를 저장 전화 번호 목록 <에 바이너리 파일에 ListBox1에 항목을 추가하려고>과 .BIN 파일로 저장하는 경우 : 끝 목록을 <>

private void savebutton_Click(object sender, EventArgs e) 
    { 
     SaveFileDialog sv = new SaveFileDialog(); 
     sv.Filter = "Binary files (*.bin)|*.bin|All files(*.*)|*.*"; 
     sv.Title = "Save File"; 
     sv.FilterIndex = 2; 
     sv.RestoreDirectory = true; 
     sv.InitialDirectory = Path.GetFullPath(@"F:\Computer Technology Skills\Programming 35\Module 1\ICA10\ICA10\bin\Debug"); 
     if (sv.ShowDialog() == DialogResult.OK) 
     { 
      try 
      { 
       FileStream fs = new FileStream(sv.FileName, FileMode.Create, FileAccess.Write); 
       BinaryWriter file = new BinaryWriter(fs); 
       //   System.IO.StreamWriter file = new System.IO.StreamWriter(sv.FileName.ToString()); 
       var message = string.Join(Environment.NewLine, PhoneNum); 
       file.Write(message); 
       file.Close(); 
       fs.Close(); 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.Message); 
      } 

     } 
    } 

가 그런 부하를 누르면 버튼은 listbox1에있는 항목을 삭제하여 각 줄의 bin 파일에 있던 항목으로 대체합니다.

private void loadbutton_Click(object sender, EventArgs e) 
    { 
     OpenFileDialog od = new OpenFileDialog(); 
     string databyte = null; 
     long iNumInts = 0; 

     od.RestoreDirectory = true; 
     od.InitialDirectory = Path.GetFullPath(@"F:\Computer Technology Skills\Programming 35\Module 1\ICA10\ICA10\bin\Debug"); 
     if (od.ShowDialog() == DialogResult.OK) 
     { 
      try 
      { 
       FileStream fs = new FileStream(od.FileName, FileMode.Open); 
       listBox1.Items.Clear(); 
       using (BinaryReader reader = new BinaryReader(fs)) 
       { 

        iNumInts = fs.Length/sizeof(int); 
        for (int i = 0; i < iNumInts; i++) 
        { 
         databyte = reader.ReadString(); //Endofstreamexception 
         listBox1.Items.Add(databyte); 

        } 
         fs.Close(); 
         reader.Close(); 
       } 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.Message); 
      } 
     } 
    } 

문제는 내가 저장 한 파일을로드 할 때, 항목은 모두에 ListBox1의 첫 번째 인덱스에 붙어과 나는 endofstream 예외가 나타날되어있다.

내 노트가 도움이되지 않아서 혼란 스러웠습니다. 다른 정수 오버플로 질문은 정수 또는 배열을 사용하는 예제였습니다. 나는 streamwriter에서 많은 도움을 준 binarywriter로 바꿨지 만, 어떤 도움이 많이 감사 할 것입니다!

답변

1

여기에 StreamReader을 사용하는 것이 좋습니다. (위 .NET 4를 사용하는 경우)

using (StreamReader reader = new StreamReader(od.Filename)) 
{ 
    while (!reader.EndOfStream) 
    { 
     string line = reader.ReadLine(); 
     listbox1.Items.Add(line); 
    } 
} 

당신은 또한 당신을 위해 모든 작업을 수행하는 File.ReadLines를 사용할 수 있습니다.

+0

감사합니다. 내가 ints 및 바이트에 대한 이진 리더 및 문자열에 대한 streamreader 유지 같아요. – user7115764

0

저장 코드를 보면 전화 번호를 하나의 문자열로 쓰고 그 사이에 줄 바꿈 구분 기호가있는 것처럼 보입니다. 읽기 코드에서 ReadString 메서드를 사용하여 개별 문자열로 읽으려고합니다.

하나의 문자열 out은 하나의 문자열과 같습니다. 즉, 모든 문자열을 하나의 문자열로 쓰면 모두 하나의 문자열로 읽습니다. 그런 다음 string.split을 사용하여 개별 번호를 얻을 수 있습니다.

관련 문제