C, C++
16. 파일 입출력
Yongs12
2023. 6. 7. 21:47
파일 열기 fopen( )
// 파일 포인터 선언
FILE *fp;
// 파일 열기 위한 함수 fopen("파일 이름", "파일 모드");
fp = fopen("test.txt", "r");
파일 모드 (기본 텍스트 속성) | 내용 |
r | 읽기 모드 파일이 없으면 NULL을 반환 |
w | 쓰기모드 파일이 없으면 새로 생성하고 파일이 이미 존재하면 기존 내용을 삭제하고 다시 만듬 |
a | 추가 모드 파일이 없으면 새로 생성하고 파일이 이미 존재하면 파일 끝에 내용 추가 |
r+ | 읽기 및 쓰기 모드 파일이 없으면 NULL을 반환 |
w+ | 읽기 및 쓰기 모드 파일이 없으면 새로 생성하고 파일이 이미 존재하면 기존 내용을 삭제하고 다시 만듬 |
a+ | 추가 및 읽기 모드 파일이 없으면 새로 생성하고 파일이 이미 존재하면 파일 끝에 내용 추가 |
rb, wb등 파일모드 뒤에 "b"를 추가하면 이진 파일로 열 수 있다.
텍스트파일이 아닌 실행, 이미지 등등의 파일은 이진파일로 연다
보안이 강화 된 파일 열기 fopen_s( )
// 파일 포인터 선언
FILE* fp;
// fopen_s(파일 포인터 주소, "파일 이름", "파일 모드");
fopen_s(&fp, "Test.txt", "r")
fopen_s() 함수는 파일 열기 시 보안상의 이유로 런타임에 파일 이름이나 모드에 대한 검사를 수행
하여 파일 이름이나 모드가 유효하지 않을 경우 오류 코드를 반환하고 파일 포인터를 NULL로 설정한다.
파일 닫기 fclose( )
// 파일 포인터 선언
FILE *fp;
// 파일 열기 위한 함수 fopen("파일 이름", "파일 모드");
fp = fopen("test.txt", "r");
// 파일은 열었으면 항상 닫아줘야 한다.
fclose(fp);
파일 읽기
1. fread( ) : Byte 단위로 파일을 읽는다.
int main()
{
// 파일 포인터 선언
FILE* fp = NULL;
// 읽어들인 내용을 저장할 공간
char buffer[255];
// 파일을 읽기 모드로 열기
fopen_s(&fp, "Test.txt", "r");
// fread(읽어들일 공간, 한번에 읽을 크기, 몇개를 읽을 것인지 개수, 파일 포인터);
fread(buffer, sizeof(char), sizeof(buffer), fp);
printf("%s", buffer);
// 파일을 열었으면 항상 닫아줘야 한다.
fclose(fp);
return 0;
}
2. fgets( ) : 한 줄씩 문자열 형태로 파일을 읽는다.
int main()
{
// 파일 포인터 선언
FILE* fp = NULL;
// 읽어들인 내용을 저장할 공간
char buffer[255];
// 파일을 읽기 모드로 열기
fopen_s(&fp, "Test.txt", "r");
// fgets(읽어들일 공간, 최대 몇개를 읽을 것인지 개수, 파일 포인터);
fgets(buffer,255, fp);
printf("%s", buffer);
// 파일을 열었으면 항상 닫아줘야 한다.
fclose(fp);
return 0;
}
3. fscanf( ) : 형식 문자열을 이용해서 파일에서 값을 읽는다.
보안 기능이 추가 된 fscanf_s( ) 사용이 권장됨 버퍼 오버런과 같은 보안 취약점을 방지할 수 있음
int main()
{
// 파일 포인터 선언
FILE* fp = NULL;
// 읽어들인 내용을 저장할 공간
char buffer[255];
int count[10];
// 파일을 읽기 모드로 열기
fopen_s(&fp, "Test.txt", "r");
// fscanf(파일 포인터, 읽을 형식 , 형식에 맞는 저장할 공간의 주소);
// 읽을 형식을 추가할 수 있음
fscanf(fp, "%s %d", buffer, &count);
printf("%s", buffer);
// 파일을 열었으면 항상 닫아줘야 한다.
fclose(fp);
return 0;
}
파일 쓰기
1. fwirte( ) : Byte 단위로 파일에 쓴다.
int main()
{
// 파일 포인터 선언
FILE* fp = NULL;
// 파일에 쓰기 위한 문자열
char buffer[10] = "Test";
// 파일을 쓰기 모드로 연다
fopen_s(&fp, "Test.txt", "w");
// fwrite(쓰기 위한 포인터, 문자 하나의 크기, 몇개를 쓸것 인지, 쓸 곳의 파일 포인터);
fwrite(buffer, sizeof(char), sizeof(buffer), fp);
// 파일을 열었으면 항상 닫아줘야 한다.
fclose(fp);
return 0;
}
2. fputs( ) : 문자열 형태로 파일에 쓴다.
int main()
{
// 파일 포인터 선언
FILE* fp = NULL;
// 파일에 쓰기 위한 문자열
char buffer[10] = "Test";
// 파일을 쓰기 모드로 연다
fopen_s(&fp, "Test.txt", "w");
// fputs(쓸 내용이 담긴 포인터 변수, 쓸 곳의 파일 포인터);
fputs(buffer, fp);
// 파일을 열었으면 항상 닫아줘야 한다.
fclose(fp);
return 0;
}
3. fprintf( ) : 형식 문자열을 이용해서 파일에 값을 쓴다.
int main()
{
// 파일 포인터 선언
FILE* fp = NULL;
// 파일에 쓰기 위한 문자열
char buffer[10] = "Test";
// 파일을 쓰기 모드로 연다
fopen_s(&fp, "Test.txt", "w");
// fprintf(쓸 내용이 담긴 포인터 변수, "형식 문자열", 쓸 곳의 파일 포인터);
fprintf(fp, "%s", buffer);
// 파일을 열었으면 항상 닫아줘야 한다.
fclose(fp);
return 0;
}