Page 253 고등학교 프로그래밍 교과서
P. 253










5 버튼(btnSave) 클릭 이벤트 처리 프로그램(btnSave_Click( )): 리스트 뷰의 데이터
를 ‘stuScore.txt’ 파일에 저장하는 프로그램이다. byte.Parse( ) 함수는 텍스트
형식의 데이터를 바이트 형식으로 변환해 준다. Seek( ) 함수는 데이터가 저장 Seek( )
파일에 저장할(된) 자료의 위치로
될 위치로 포인터를 이동시켜 준다. 예를 들어, 10번 학생의 데이터는 포인터를
포인터를 이동시켜 준다.
360(9명×40바이트)번째 바이트로 이동한 후 이곳에서부터 데이터를 저장하 SeekOrigin.Begin 문장은 파일의
처음부터 위치를 계산한다.
기 시작한다.

98 string irum = "";
99 BinaryWriter outStream = new BinaryWriter(new FileStream
100 (@"C:\Data\stuScore.txt", FileMode.Create)); 쓰기 모드로 파일 오픈
101 int listViewEnd = listView1.Items.Count;
리스트 뷰에 출력된 총 자료의 수
102 for (int i = 0; i < listViewEnd; i++)
103 { 리스트 뷰의 항목들을 바이트형으로 변환한 후 변수에 대입
104 hak = byte.Parse(listView1.Items[i].SubItems[0].Text);
105 ban = byte.Parse(listView1.Items[i].SubItems[1].Text);
106 bunho = byte.Parse(listView1.Items[i].SubItems[2].Text);
107 irum = listView1.Items[i].SubItems[3].Text + " ";
108 outStream.Seek(i * recordSize, SeekOrigin.Begin);
저장할 자료의
109 outStream.Write(hak); 자료를 파일에 쓰기
위치로 포인터 이동
110 outStream.Write(ban);
111 outStream.Write(bunho);
irum.Substring(0, 6)
112 outStream.Write(irum.Substring(0, 6)); 이름은 왼쪽부터 6개의 문자만 저장
변수 irum에 저장된 문자열을 처음
113 outStream.Seek(i * recordSize + 20, SeekOrigin.Begin); 부터 6개의 문자만 가져온다
114 for (int j=0; j<10; j++) 점수의 시작 위치로 포인터 이동
115 { 레코드의 구조
116 outStream.Write(score[ban, bunho, j]); 과목별 점수를 파일에 쓰기 0 3 20 30 39
학번 이름 점수 총점…
117 }
118 }
119 outStream.Close( );
120 MessageBox.Show(" 원시 성적을 저장하였습니다.");


저장된 ‘stuScore.txt’ 파일의 논리적인 구조는 다음과 같다.

학년 반 번호 이름 점수 총점 평균 등급 기타
(1) (1) (1) (17) (10) (4) (4) (1) (1)




……





3. 프로그래밍의 실제 II 251






(책)2015프로그래밍-교과서3차심의본 본문.indb 251 2017-09-05 오후 4:17:07
   248   249   250   251   252   253   254   255   256   257   258