Chapter 14 이진 데이터 파일과 임의 접근 데이터 파일 C 이진 데이터 파일 임의 접근 파일
이진 파일의 처리 이진 파일: 기계가 읽을 수 있는 형태의 2진 코드로 데이터나 명령을 저장하고 있어 2진 파일을 직접 프린트하거나 내용을 볼 수는 없지만, 문서 데이터 파일에 비해 보다 압축된 형태로 데이터를 저장할 수 있으며, 구조적 데이터(배열, 구조체)를 가진 구조적 레코드의 입출력이 가능 fread와 fwrite 함수를 통해 2진 파일을 지원한다는 것, 즉 입출력문을 제외하고는 파일 처리에 관한 모든 것이 8장의 문서 파일과 동일 fwrite (AddressOfBuffer, LengthOfBuffer, NumberOfElements, InternalFileName); fread (AddressOfBuffer, LengthOfBuffer, NumberOfElements, InternalFileName); 예제 14.1 : 2진 파일 생성 예제 14.2 : 2진 파일을 출력 예제 프로그램 1 : 구조체를 가진 2진 파일을 처리하는 프로그램
[참고] 순차 접근 파일의 생성 datafile = fopen("DATA.TXT", "w"); fputc(ch, datafile); fputc(ch, datafile); // ch가 A, M, E, S 값을 가지고 있을 경우에 대해서 네 번 더 실행 fclose(datafile); // 운영체제는 end-of-file 표시를 다음 그림과 같이 넣는다.
임의 접근 파일 파일에 있는 데이터 항목을 파일의 시작과 끝 또는 현재 읽기/쓰기 위치로부터의 변위(offset) 값을 사용하여 이전의 데이터를 접근하지 않고도 직접 접근할 수 있는 파일 fseek(InternalFileName, Offset, WhereFrom); 표준 상수 SEEK_SET: 파일의 시작으로부터 읽기 또는 쓰기 포인터를 Offset 바이트만큼 이동. 표준 상수 SEEK_END: 파일의 끝으로부터 읽기 또는 쓰기 포인터를 Offset 바이트만큼 이동 표준 상수 SEEK_CUR: 파일의 현재 위치로부터 읽기 또는 쓰기 포인터를 Offset 바이트만큼 이동 ftell 함수는 파일에서 읽기 또는 쓰기 포인터의 색인(index)을 반환
임의 접근 파일의 예 예제 14.4 datafile = fopen("DATA.TXT", "r"); ftell(datafile); //0을 반환 fseek(datafile, 2, SEEK_SET); ftell(datafile); //2를 반환 fseek(datafile, 0, SEEK_SET); //파일의 시작 위치에 있는 읽기 포인터를 반환 fseek(datafile, 0, SEEK_END); //EOF 표시가 있는 파일의 마지막 위치로 읽기 포인터를 이동 ftell(datafile); //5를 반환