관리 메뉴

Life is like a Wolf

[C언어]파일 입출력#4 <바이너리 모드> ( fwrite(), fread() ) 본문

프로그래밍언어/C언어

[C언어]파일 입출력#4 <바이너리 모드> ( fwrite(), fread() )

돌아온 Daos 2010.08.18 14:14

  프로그램에서 사용하는 표현과 동일한 표현으로 데이터를 파일에 저장할 때, 그 데이터가 바이너리 형태(binary form)로 저장된다고 합니다.  수치가 문자열로 변환되는 일이 일어나지 않지요.
 표준 입출력의 경우에, fread()와 fwrite() 함수가 이와같은 바이너리 서비스를 제공합니다.

size_t fwrite( const void *buffer, size_t size, size_t count, FILE *stream );

fwrite() 매개변수 설명
- buffer : 저장할 데이터 덩어리의 주소,
- size : 저장할 데이터 덩어리들의 크기,
- count : 저장할 데이터 덩어리들의 수,
- stream : 데이터가 저장될 파일

size_t fread( void *buffer, size_t size, size_t count, FILE *stream );

fread() 매개변수 설명
- buffer : 파일로부터 읽은 데이터를 저장할 메모리 공간의 주소
- size : 데이터들의 크기
- count : 데이터들의 수
- stream : 데이터를 읽을 파일

예제를 보면서 설명하겠습니다.

1. 구조체 선언



2. 구조체 정의 및 파일 입출력
 

 보신것처럼 Book구조체 배열b1에 Book1개의 공간을 정의하고
배열b1의 첫번째 공간에 페이지의 수, 가격, 도서명을 입력 후 20번째 줄의 fwrite()를 이용하여 저장을합니다.
 그 후 읽어드릴때는 Result라는 Book형의 배열을 선언하고 그 첫번째 공간에 fread()함수를 이용하여 옮겨담았습니다.

3. 출력 결과 및 파일입출력 결과


< 실행파일 >
4 Comments
  • 프로필사진 김태옥 2011.06.09 12:15 신고 구조체말고 간단하게 바이너리파일을 만들수 없나요?
    #include <stdio.h>

    void main()
    {
    char input[20];
    FILE *file;

    file=fopen("c:\\abcded.bin","r");
    //scanf("%s", input);
    //fread(input, sizeof(char), 20, file);
    //fwrite(input, sizeof(char), 20, file);
    fgets(input, 20, file);
    printf("%s", input);
    fclose(file);
    }

    제가 바이너리 입출력파일에 대한 개념이 확실히 안잡혀서 그런데..
    간단히 바이너리(2진파일)만드는 방법좀 가르쳐주세요..
    fwrite로 하면 된다고 한거 같은데 왜 안되는지 모르겠습니다.
  • 프로필사진 돌아온 Daos 2011.06.20 15:21 신고 답변이 늦어서 죄송합니다.
    요즘 정신이없어서;;
    구조체 안쓰시고 그냥하시면됩니다^^
    20번째 줄의 fwrite()안의 매개변수들만 잘 써넣어주시면 되구요
  • 프로필사진 김태옥 2011.06.09 12:17 신고 아 그리고, bin 파일로는 어떻게 만들죠? 제가 위에 적어놓은것처럼 저장하면 되나요?
    저렇게 저장을 해도 씨언어로 r 모드로 돌려도 다 읽히더군요.. 바이너리로 저장이 안되는거 같아요..
  • 프로필사진 돌아온 Daos 2011.06.20 15:24 신고 넵 위의 코드대로 하시면 됩니다 ㅎㅎ
    다른 확장자같은 경우에도 하신것과 똑같이
    하시면 됩니다.
    txt로 출력한것은 메모장으로 열어서 확인시켜드리려고
    예제로 저장한것입니다.^^
    제 생각엔 잘하신것 같은데요^^ 정확히 보려면 위의 메모장 결과처럼 텍스트로 만들어서 확인해보시면됩니다.
댓글쓰기 폼