파일의 개방 모드 -> stream을 어떻게 생성하는가에 대한 방법. fopen( , "wt" 또는 "rt" ) write와 read 이 외 모드.
a.txt data는 사람이 볼수 있는 파일,
a.bin 메모장으로 읽을 수 없는 이진수로 된 파일. (음원, 영상 등 소프트웨어에 의해 해석이 되는 데이터)
"wt" : write text -> 텍스트 형태로 사람 또는 프로그램이 쓸 수 있음 "wb" : write binary -> 바이너리(bin) 파일로 프로그램이 기계어로 생성 (그림, 시스템파일, 데이터베이스 등)
"rt" : read text -> 위와 동일, 다만 '읽기 모드' "rb" : read binary
스트림의 구분 기준.
1. 읽기 위한 스트림인가? 쓰기 위한 스트림인가? 2. Text 데이터를 위한 스트림인가? Binary를 위한 데이터 스트림인가?
모드(mode)
스트림의 성격
파일 없으면
r
읽기가능
에러
w
쓰기가능
생성
a
파일끝 덧붙여 쓰기가능
생성
r+
읽기/쓰기 가능
에러
w+
읽기/쓰기 가능
생성
a+
읽기/덧붙여 쓰기 가능
생성
반응형
그러나 +모드들은 잘 사용하지 않음. 모드 r w a 를 주로 사용함. 특징: r은 없으면 에러발생, a는 파일없으면 생성. w는 덮어쓰지만, a는 그 뒤에 덮어씀.
// 사용 예제. 이와 같이 모드를 사용함.
fopen("file.txt", "rb"); // read binary
fopen("file.txt", "wt"); // write text
fopen("file.txt", "a+t"); // a+ text
파일 생성해 쓰기 (파일이 있을 시 덮어씌움)
#define _CRT_SECURE_NO_WARNINGS 는 비주얼스튜디오를 사용할 때 필요하다.
#define _CRT_SECURE_NO_WARNINGS // fopen 보안 경고로 인한 컴파일 에러 방지
#include<stdio.h>
int main(void)
{
FILE* pFile = fopen("test.txt", "w");
fprintf(pFile, "hello world");
fclose(pFile);
return 0;
}
(결과)
저장 경로를 따로 지정하지 않아서 .c 파일이 있는 위치에 아래와 같이 txt파일이 생성되었다.
존재하는 파일을 읽기
#define _CRT_SECURE_NO_WARNINGS는 비주얼스튜디오를 사용할 때 필요하다.
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main(void)
{
FILE* pFile = fopen("test.txt", "r"); //read mode
if(pFile == NULL)
{
//r로 읽을 때는 파일이 없을 수 있기 때문에 이렇게 널체크를 해주어야합니다.
//파일이 없으면 FILE*가 NULL 입니다.
//파일이 없을때 파일을 만드는 처리를 하던지 프로그램에 맞게 짜면됩니다.
//여기서는 프로그램을 종료 하겠습니다.
printf("파일이 없습니다. 프로그램을 종료합니다.");
return 0;
}
//여기까지 와다는건 read 모드로 파일이 열린것 입니다.
char str[50];
fgets(str, 50, pFile); //파일에 있는거 읽어오기
fclose(pFile); //파일 닫기
printf("%s\n", str); //터미널에 출력
return 0;
}
(결과)
위에서 생성한 test.txt 파일 내부 글자를 읽고 터미널에 출력했다.
존재하는 파일에 덮어쓰지 않고, 뒤에 추가하기
#define _CRT_SECURE_NO_WARNINGS는 비주얼스튜디오를 사용할 때 필요하다.