파일의 개방 모드
-> 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 는 비주얼스튜디오를 사용할 때 필요하다.
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main(void)
{
// 추가쓰기 모드로 열기
FILE* pFile = fopen("test.txt", "a");
fputs("\n 한줄 내려와서 글자 추가!", pFile);
fclose(pFile);
return 0;
}
(결과)
이미 생성된 text.txt 파일에 한줄 내려와서 새로운 글자를 추가하고 닫았다.
'C언어 \ C++' 카테고리의 다른 글
[C언어] 문자열 입력 버퍼(buffer) 비우기 함수 (0) | 2022.02.25 |
---|---|
[C언어] 문자열(string) 입출력 (puts, fputs, gets, fgets) 사용법 (0) | 2022.02.25 |
[C언어] C언어에서 EOF란? (C언어 파일 종료 코드) (2) | 2022.02.22 |
[C언어] C언어 표준 입출력 stdin, stdout (입력과 출력), 문자 입출력 ( getchar, putchar, fgetc, fputc) (0) | 2022.02.21 |
[C언어] main함수로 인자 전달 (argc, argv [ ]) (0) | 2022.02.21 |