C++프로그래밍

2013.05.02_파일입출력

성엽이 2013. 5. 2. 15:52

▶ 파일 입출력


 문자 데이터 : 아스키코드 하나하나씩 받음.

 문자열 데이터 : '\n' 을 포함한 문장을 받음.

 형식화 데이터 : 표를 쓰는 애들 (형식이 정해져있음)

 구조체 데이터 : 구조체 쓸때 편하라고 ..



 w 나 w+ 같은 경우는 파일이 없으면 파일을 새로 생성하고, 파일이 있으면 기존에 파일을 모두 지우고 새로운 파일을 생성 , 쓰기!

 r 이나 r+ 같은 경우는 파일이 없으면 생성이 불가하고 , 파일을 읽음

 a 는 파일데이터의 끝에 새로운 데이터를 추가함.




버퍼 내의 데이터는 다음경우에 실제디스크에 기록된다. 


3) 프로그램이 종료될때 디스크에 기록되는 경우는 완전히 프로그램이 종료되는 exit(-1); 같은 경우에 실제로 기록된다. 



 

11-1
#include
 < stdio.h >
#include < conio.h >
#include < stdlib.h >

int main()
{
  FILE *fp;
  char ch;
    
  // 키보드로부터 문자를 읽어 파일에 기록
  printf("입력 종료하려면 <$> 키를 눌르셔요\n");
  
  fp = fopen("d11-1.txt""w");
  while((ch = getche()) != '$')
  {
    putc(ch,fp);
  }
  fclose(fp);

  // 파일로부터 데이터를 읽어 화면에 출력
  printf("\n 11-1txt 파일내용\n");

  if((fp = fopen("d11-1.txt","r")) == NULL)
  {
    printf("파일을 열수 없습니다.\n");
    exit(-1);
  }
  
  while((ch = getc(fp)) != EOF)
  {
    printf("%c",ch);
  }
  fclose(fp);

  return 0;
}


참고 : 11-1 예제에서, 엔터를 도중에 입력하면 덮어써버리는데, 엔터는 캐리지 리턴과 라인 피드로 이루어진다.

그러나 함수가 라인피드를 씹고 캐리지리턴만 받아 맨 앞으로만 이동해 버린다.

입력 : 안녕하세요<엔터>히히히

파일 : 안녕하세요■히히히

출력 : 히히히세요 <-커서만 앞으로 이동해 '히히히'를 출력했다. '안녕하'에 덮어써졌으나 '안녕하'가 안써진건 아니다.

11-2
#include
 < stdio.h >
#include < process.h >

int main(int argc, char *argv[])
{
  FILE *fp;
  int count = 0;
  
  if( argc != 2)
  {
    printf("그렇게 입력하면 안되~\n");
    printf("▶파일명 출력파일명\n");
    exit(-1);
  }  
  
  if((fp = fopen(argv[1], "r")) == NULL )
  {
    printf("파일을 열수가 없어요.%s\n", argv[1]);
    exit(-1);
  }

  while(getc(fp) != EOF)
  {
    count++;  
  }

  fclose(fp);
  
  printf("파일 %s 포함된 문자갯수는 %d\n", argv[1], count);

  return 0;
}