C++프로 그래 밍 에 관 한 파일 작업 을 해독 합 니 다.

6202 단어 C++문건
C++파일 의 개념
지금까지 우리 가 논의 한 입 출력 은 시스템 이 지정 한 표준 장치(입력 장 치 는 키보드,출력 장 치 는 모니터)를 대상 으로 했다.실제 응용 에 서 는 디스크 파일 을 대상 으로 합 니 다.디스크 파일 에서 데 이 터 를 읽 고 디스크 파일 로 데 이 터 를 출력 하 는 것 이다.디스크 는 컴퓨터 의 외부 메모리 로 정 보 를 장기 적 으로 보존 할 수 있 고 읽 을 수 있 으 며 쓸 수 있 으 며 다시 쓸 수 있어 휴대 하기 편리 하기 때문에 광범 위 하 게 사용 된다.
파일(file)은 프로그램 설계 에서 중요 한 개념 이다.'파일'이란 일반적으로 외부 미디어 에 저 장 된 데이터 의 집합 을 말한다.일부 데 이 터 는 외부 미디어(예 를 들 어 디스크,CD,U 디스크)에 파일 형식 으로 저 장 됩 니 다.운영 체 제 는 파일 단위 로 데 이 터 를 관리 합 니 다.즉,외부 미디어 에 존재 하 는 데 이 터 를 찾 으 려 면 파일 이름 에 따라 지정 한 파일 을 찾 은 다음 이 파일 에서 데 이 터 를 읽 어야 합 니 다.외부 미디어 에 데 이 터 를 저장 하려 면 파일(파일 이름 표시)을 만들어 야 데 이 터 를 출력 할 수 있 습 니 다.
외부 저장 파일 은 디스크 파일,CD 파일,USB 파일 을 포함한다.현재 가장 광범 위 하 게 사용 되 는 것 은 디스크 파일 입 니 다.서술 이 편리 하기 위해 튜 토리 얼 에서 외부 저장 파일 을 사용 하 는 곳 은 모두 디스크 파일 로 대표 되 며 프로그램 에서 CD 파일 과 U 디스크 파일 을 사용 하 는 방법 은 디스크 파일 과 같 습 니 다.
사용자 에 게 자주 사용 되 는 파일 은 두 가지 종류 가 있 는데 하 나 는 프로그램 파일(program file)이다.예 를 들 어 C++의 소스 파일(.cpp),대상 파일(.obj),실행 가능 한 파일(.exe)등 이다.하 나 는 데이터 파일(data file)입 니 다.프로그램 이 실 행 될 때 일부 데이터(실 행 된 최종 결과 나 중간 데이터)를 디스크 에 출력 하여 저장 해 야 합 니 다.나중에 필요 할 때 디스크 에서 컴퓨터 메모리 로 입력 해 야 합 니 다.이런 디스크 파일 은 바로 데이터 파일 이다.프로그램의 입 출력 대상 이 데이터 파일 입 니 다.
파일 에 있 는 데이터 의 조직 형태 에 따라 ASCII 파일 과 바 이 너 리 파일 로 나 눌 수 있 습 니 다.ASCII 파일 은 텍스트(text)파일 이나 문자 파일 이 라 고도 부 릅 니 다.모든 바이트 에 ASCII 코드 를 넣 어 문 자 를 대표 합 니 다.바 이 너 리 파일 은 내부 형식 파일 이나 바이트 파일 이 라 고도 부 르 며 메모리 에 있 는 데 이 터 를 메모리 에 저장 하 는 형식 으로 디스크 에 그대로 출력 하여 저장 합 니 다.
문자 정 보 는 메모리 에 ASCII 코드 로 저장 되 어 있 기 때문에 ASCII 파일 로 출력 하 든 바 이 너 리 파일 로 출력 하 든 데이터 형식 은 같 습 니 다.그러나 수치 데이터 에 대해 서 는 양자 가 다르다.예 를 들 어 메모리 에 4 개의 바이트 가 있 는 긴 정수 100000 이 있 습 니 다.내부 형식 으로 직접 출력 하면 디스크 파일 에 4 개의 바이트 가 있 고 ASCII 코드 로 출력 하면 6 개의 바이트 가 됩 니 다.
ASCII 코드 로 출력 된 데 이 터 는 문자 와 일일이 대응 하 며,하나의 바이트 가 하나의 문 자 를 대표 하여 화면 에 직접 표시 하거나 인쇄 할 수 있 습 니 다.이런 방식 은 사용 이 편리 하고 직관 적 이 며 읽 기 쉬 우 며 문자 에 대해 하나씩 입 출력 하기 쉽다.그러나 일반적으로 저장 공간 을 많이 차지 하고 전환 시간(바 이 너 리 형식 과 ASCII 코드 간 의 전환)을 써 야 한다.내부 형식(바 이 너 리 형식)으로 수 치 를 출력 하면 외부 저장 공간 을 절약 할 수 있 고 시간 을 바 꿀 필요 가 없 지만 한 바이트 가 한 글자 에 대응 하지 않 아 파일 의 내용 을 직접 표시 할 수 없습니다.프로그램 이 실행 되 는 과정 에서 일부 중간 결과 데 이 터 를 디스크 파일 에 잠시 저장 하고 나중에 메모리 에 입력 해 야 한다 면 이 때 바 이 너 리 파일 로 저장 하 는 것 이 가장 적합 합 니 다.읽 을 수 있 도록 표시 하고 인쇄 하기 위해 서 는 ASCII 코드 로 출력 해 야 한다.이때 얻 은 것 은 ASCII 파일 로 디 스 플레이 에서 직접 볼 수 있다.
C++는 저급한 I/O 기능 과 고급 I/O 기능 을 제공 합 니 다.고급 I/O 기능 은 여러 개의 바이트 를 의미 있 는 단위(예 를 들 어 정수,단일 정밀도,이중 정밀도,문자열 또는 사용자 정의 형식의 데이터)로 조합 한 다음 에 ASCII 문자 형식 으로 입력 하고 출력 하 는 것 이다.예 를 들 어 데 이 터 를 메모리 에서 디 스 플레이 로 출력 하면 고급 I/O 기능 에 속 하고 메모리 에 있 는 데 이 터 를 ASCII 문자 로 변환 한 다음 에 각각 정수,단일 정밀도,이중 정밀도 등 형식 으로 출력 한다.이런 유형 을 대상 으로 하 는 입 출력 은 프로그램 에서 매우 보편적으로 사용 되 고 사용자 가 편리 함 을 느낀다.그러나 대 용량 파일 을 전송 할 때 데이터 형식 전환 으로 속도 가 느 리 고 효율 이 높 지 않다.
저급한 I/O 기능 이란 바이트 단위 로 입 출력 되 며 입 출력 시 데이터 형식 변환 을 하지 않 습 니 다.이런 입 출력 은 이 진 형식 으로 진행 된다.보통 메모리 와 장치 사이 에 바이트 들 을 전송 하 는 데 쓰 인 다.이러한 입 출력 속도 가 빠 르 고 효율 이 높 으 며 일반 대 용량 의 파일 전송 은 형식 없 이 변환 되 는 I/O 이다.사용 시 불편 함 을 느 낄 수 있 습 니 다.
C++파일 열기 및 닫 기
디스크 에 있 는 파일 을 어떻게 열 고 닫 는 지,다른 외부 장치(U 디스크,CD 등)에 있 는 파일 은 이와 같 습 니 다.
파일 열기
열 림(open)파일 이란 방문 을 열 면 방 에 들 어 갈 수 있 는 것 처럼 이미지 표현 이다.파일 을 여 는 것 은 파일 을 읽 고 쓰기 전에 필요 한 준 비 를 하 는 것 을 말 합 니 다.예 를 들 어:
파일 흐름 대상 과 지정 한 디스크 파일 을 연결 하여 파일 이 지정 한 디스크 파일 로 흐 르 도록 합 니 다.
이 파일 이 입력 파일 인지 출력 파일 인지 ASCII 파일 인지 바 이 너 리 파일 인지 등 파일 의 작업 방식 을 지정 합 니 다.
이상 의 일 은 두 가지 다른 방법 을 통 해 실현 할 수 있다.
1)파일 흐름 을 호출 하 는 구성원 함수 open....와 같다

  ofstream outfile; //  ofstream (      )  outfile
  outfile.open("f1.dat",ios::out); //     f1.dat      
두 번 째 줄 은 출력 파일 흐름 을 호출 하 는 구성원 함수 open 으로 디스크 파일 f1.dat 를 열 고 출력 파일 로 지정 합 니 다.파일 흐름 대상 outfile 은 디스크 파일 f1.dat 에 데 이 터 를 출력 합 니 다.ios::out 은 I/O 모드 의 하나 로 출력 방식 으로 파일 을 여 는 것 을 표시 합 니 다.또는 간단하게 말 하면 이때 f1.dat 는 출력 파일 로 메모리 에서 출력 된 데 이 터 를 받 습 니 다.
구성원 함수 open 을 호출 하 는 일반적인 형식 은:
    파일 흐름 대상.open(디스크 파일 이름,입 출력 방식);
디스크 파일 이름 은"c:ew\\f1.dat"와 같은 경 로 를 포함 할 수 있 습 니 다.경로 가 부족 하면 기본 값 은 현재 디 렉 터 리 에 있 는 파일 입 니 다.
2)파일 흐름 대상 을 정의 할 때 매개 변 수 를 지정 합 니 다.
파일 흐름 을 설명 할 때 파 라 메 터 를 가 진 구조 함 수 를 정의 합 니 다.디스크 파일 을 여 는 기능 이 포함 되 어 있 습 니 다.따라서 파일 흐름 대상 을 정의 할 때 파 라 메 터 를 지정 하고 파일 흐름 류 의 구조 함 수 를 호출 하여 파일 을 여 는 기능 을 수행 할 수 있 습 니 다....와 같다

  ostream outfile("f1.dat",ios::out);
일반적으로 이 형식 을 많이 사용 하면 비교적 편리 하 다.역할 은 open 함수 와 같 습 니 다.
입 출력 방식 은 ios 클래스 에서 정 의 된 것 입 니 다.상수 이 고 여러 가지 선택 이 있 습 니 다.표 참조.

몇 가지 설명:
1)새 버 전의 I/O 라 이브 러 리 에는 ios:nocreate 와 ios::noreplace 가 제공 되 지 않 습 니 다.
2)열 린 파일 마다 파일 포인터 가 있 습 니 다.이 포인터 의 초기 위 치 는 I/O 방식 으로 지정 되 어 있 으 며 읽 기와 쓰 기 는 파일 포인터 의 현재 위치 에서 시 작 됩 니 다.한 바이트 씩 읽 을 때마다 바늘 은 한 바이트 뒤로 이동한다.파일 포인터 가 마지막 으로 이동 하면 파일 끝 EOF(파일 끝 문자 도 하나의 바이트,그 값 은-1)를 만 납 니 다.이때 스 트림 대상 의 구성원 함수 eof 의 값 은 0 이 아 닌 값(일반적으로 1 로 설정)으로 파일 이 끝 났 음 을 나 타 냅 니 다.
3)"비트 또는"연산 자"|"로 입 출력 방식 을 조합 할 수 있 습 니 다.표 13.6 의 마지막 3 줄 과 같 습 니 다.다음 의 예 도 들 수 있다.

  ios::in | ios:: noreplace //        ,                
  ios::app | ios::nocreate //        ,         ,      ,          
  ios::out l ios::noreplace //             ,                 
  ios::in l ios::out I ios::binary //         ,    
그러나 ios:nocreate l ios::noreplace 와 같은 서로 배척 하 는 방식 을 조합 할 수 없습니다.
4)열 리 는 작업 에 실패 하면 open 함수 의 반환 값 은 0(가짜)이 고 구조 함 수 를 호출 하 는 방식 으로 파일 을 열 면 스 트림 대상 의 값 은 0 입 니 다.이 테스트 를 통 해 성공 여 부 를 열 수 있 습 니 다....와 같다
 

  if(outfile.open("f1.bat", ios::app) ==0)
    cout <<"open error";
혹시

  if( !outfile.open("f1.bat", ios::app) )
    cout <<"open error";
디스크 파일 닫 기
열 린 디스크 파일 에 대한 읽 기와 쓰기 작업 이 완료 되면 이 파일 을 닫 아야 합 니 다.파일 을 닫 고 구성원 함수 close 를 사용 합 니 다....와 같다
    outfile.close( );  //출력 파일 흐름 과 연 결 된 디스크 파일 을 닫 습 니 다.
닫 기 란 실제 적 으로 이 디스크 파일 과 파일 흐름 의 연결 을 해제 하 는 것 이 며,원래 설 정 된 작업 방식 도 효력 을 상실 하여 더 이상 파일 흐름 을 통 해 이 파일 을 입력 하거나 출력 할 수 없습니다.이 때 파일 흐름 을 다른 디스크 파일 과 연결 시 키 고 파일 흐름 을 통 해 새 파일 을 입력 하거나 출력 할 수 있 습 니 다....와 같다
    outfile.open("f2.dat",ios::app|ios::nocreate);
이 때 파일 흐름 outfile 은 f2.dat 와 연결 되 고 f2.dat 의 작업 방식 을 지정 합 니 다.

좋은 웹페이지 즐겨찾기