본문 바로가기
코스웨어/16년 스마트컨트롤러

20160307_김도관_업무일지_파일입출력

by 알 수 없는 사용자 2016. 3. 8.
728x90
반응형
  • 파일 오픈 : 파일을 입출력하기 위한 준비과정

  스트림을 통해 내부버퍼에 잠시저장하며 File Pointer를 초기화 함

    1. 스트림 : 프로그램과 데이터파일 사이의 일종의 다리역활
    2. 버퍼 : 임시적으로 저장되는 메모리 공간 (스트림에 기본적으로 포함됨)

    • fopen 함수

1
FILE *fopen(const char *name, const char *mode)
cs

    1. 첫번째 전달인자 name : 파일이름
    2. 두번째 전달인자 mode : 파일여는 모드

 mode

 각각의 모드 설명

 “r”

 읽기 모드로 파일을 연다.

 “w”

 쓰기 모드로 파일을 생성.파일이 없으면 생성됨. 파일이 이미 존재하면 기존의 내용이 지워짐

 “a“

 추가 모드로 파일을 연다.만약 동일한 기존의 파일이 있으면 데이터가 파일의 끝에 추가됨. 파일이 없으면 새로운 파일을 만듦

 “r+”

 읽기 모드로 파일을 연다.쓰기 모드로 전환 가능. 파일이 반드시 존재하여야 함

 “w+”

 쓰기 모드로 파일을 생성한다. 읽기 모드로 전환 가능. 파일이 존재하면 기존의 데이터가 지워짐

 “a+”

 추가 모드로 파일을 연다. 읽기 모드로 전환 가능. 데이터를 추가하면 EOF 마커를 추가된 데이터의 뒤로 이동. 

 파일이 없 으면 새로운 파일을 만듦

 “b”

 이진 파일 모드로 파일을 연다










    • 파일 형태
오픈 모드외에도 파일의 형태를 지정하는 플래그를 추가로 지정 가능
        • 텍스트 파일일때 변환되어지는 것들
1. 개행코드 CR/LF
CR (캐리지 리턴) - 복귀
LF (라인피드) - 개행문자
2. Ctrl+Z(0x1A)는 EOF(-1)로 변환되어 읽혀짐
EOF(End Of File) - 파일의 끝을 나타냄

        • 오픈 모드와 파일형태가 mode 인수에 같이 기록됨

   

 "rt"

 텍스트 파일을 읽기 전용으로 열기

 "wb"

 이진 파일을 쓰기 전용으로 열기

 "r+b"

 이진 파일을 읽기, 쓰기 가능하도록 열기. "rb+"로 대체 가능



 


 

    • 리턴
fopen은 FILE 구조체를 생성한후 리턴을 함
error 발생시 NULL 값을 리턴함
반드시 사용후 int fclose(FILE *stream); 로 닫아줘야함

    • 코드

1번째

1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
 
int main()
{
    FILE *fp = fopen("d:\\A.txt","w"); // file에 write, 없으면 파일 자동생성
    fprintf( fp, "테스트\n"); //입력되는 문자열
    fclose(fp);
 
    return 0;
}
cs


5번째줄 디렉토리 구분할때쓰는 \는 단일로 사용시 확장열로 인식하기때문에 반드시 절대경로로 사용할때 \\ 로 써야됨

6번째줄 뒤의 "테스트\n"이라는 문자열이 A.txt파일에 저장됨


출력 :





2번째

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
 
int main()
{
    FILE *f;
    f = fopen("B.txt","rb");
    if (f == NULL)
    {
        printf("파일이 없습니다");
    } else{
        printf("파일이 있습니다");
        fclose(f); //에러시 필요없음
    }
    return 0;
}
cs


6번째줄 이진파일로 읽기 쓰기가능하게끔 연다

9번째줄 파일이 없으므로 error처리 되므로 fclose가 필요 없음

12번째줄 에러가 아니므로 반드시 fclose로 닫아줘야됨


출력:


그외 용어 정리 및 기타


논리적 : 포맷,파티션 등등의 물리적으로 보이지 않는 소프트웨어적이나 가상의 개념을 뜻함

물리적 : 논리적인 개념과 반대의 개념으로써 실제 사물로써 만질수 있는 것

드라이브 : C:,D: 등등의 논리적 혹은 물리적 입출력 장치

디렉토리 : 드라이브 내부에 존재하는 파일들을 묶어놓은 폴더 

상대경로 : 상대적으로 줄여서 나타내는 경로 ex) ../A.txt

절대경로 : 모든 위치를 표기하는 경로 ex) C:\AB\A.txt


일반적으로 DOS 나 Window에서는 대소문자를 구분하지 않으나

코딩이나 유닉스 및 리눅스계열의 OS를 사용할때 반드시 대소문자를 구분해야됨

728x90