개발개발/c++

c++의 파일 입출력

유잉유잉유잉 2024. 12. 10. 23:50
728x90

c언어 스타일 파일 입출력

파일 포인터 변수 선언

FILE * file = nullptr;

파일을 만들거나 읽어와야할 때 사용

 

파일 생성 및 입력하기

fopen_s(&file, "fileName.txt", "at);
  • 첫번째 인자 :  동적 할당한 메모리 주소 넘기기
  • 두번째 인자 : 절대/상대 경로
  • 세번째인자 - 모드1번
    • r : 읽어오기
    • w : 파일 만들기 ( 기존거 있으면 덮어쓰기 )
    • a : append 모드. 없으면 새로 만듦. 있으면 기존 파일을 읽은 후 맨뒤에 추가
  • 세번째 인자 - 모드2번
    • t : 텍스트파일
    • b : 바이너리파일
    • r+ : 파일이 있으면 읽기/쓰기 둘 다 가능하게 열어줌. 파일이 없으면 에러
    • g+ : 파일이 있으면 읽기/쓰기 둘 다 가능하게 열어줌. 파일이 없으면 만듦.
    • a+ : 파일이 있으면 맨 뒤에서부터 읽고 쓰기 가능하도록 열어줌. 없으면 만듦.
FILE * file = nullptr;

fopen_s( &file, "testText.txt", at);

// 파일이 정상적으로 열렸다면
if( nullptr != file)
{
	// 캐릭터 한글자 파일에 저장
	fputc('a', file);
    
    // 문자열을 파일에 저장
    fputs("SSS\n", file);

	// fprintf() : 파일 스트림에 포멧을 지정하여 저장
	int num = 100;
    fprintf( file, "num = %d", num);

	// 파일은 사용 후 꼭 닫아주는 습관!
	fclose(file);
}

빌드하면 프로젝트 폴더 내에 파일이 생성

메모장 내에 입력한 내용을 확인할 수 있음.

 

파일 읽어오기 

FILE * file = nullptr;

fopen_s( &file, "TestFile.txt", "rt");

// if( nullptr != file )과 동일한 문장
if( file )
{
	// fgetc : 문자(char) 하나 읽어오기
    char txt = fgetc(file);
    std::cout << txt << std::endl;
    
    // fgets : 문자열 읽어오기. 개행까지 문자열 한줄을 읽어옴
    char txt2 [128] = {};
    fgets(txt2, 128, file);
    std::cout << txt2 << std::endl;

	// fscanf_s() : 파일 스트림에 포멧을 지정하여 읽어오는 함수
    int num = 0; 
    fscanf_s( file, "num = %d", &num);
    std::cout << num << std::endl;

	fclose(file);
}

TestFile.txt의 내용이 위와같은 경우에서 위 코드를 실행할 경우

String\n 까지 읽어들어져서 String 문자열 이후 개행이 실행됨

 

 

728x90