C++기초

220328(1)_파일 입출력(1)_ 파일 쓰기

hyrule 2022. 4. 5. 17:07
#include <iostream>

//fopen_s() //이중 포인터를 인자로 받는다. 
/*
* 이중 포인터를 인자로 받는 이유
	결과를 반환타입을 정해서 return 을 이용하여 반환하는 형태를
	Call By Value라고 한다.

	포인터를 이용해서 결과를 반환하는 형태를
	Call By Address라고 한다.

	레퍼런스를 이용해서 결과를 반환하는 형태를
	Call By Reference 라고 한다.

	크게 이 세 가지 형태로 함수가 구성된다고 볼 수 있는데
*/

//이중 포인터는 Call By Address 형태이다.
void Alloc(int** Memory)
{
	*Memory = new int;
}


int main()
{
	//파일 입출력은 c언어 스타일과 c++ 스타일이 있다.
	//선생님은 c언어 스타일을 선호
	//둘 중 어떤 게 더 좋다라는건 없다.

	
	int* Test = nullptr;

	Alloc(&Test);

	delete Test;

	FILE* File = nullptr;


	/*
	* 2번째인자는 파일의 경로가 들어가게 된다.
	경로는 상대경로, 절대경로 2가지가 있다.
	절대경로는 C:\abcd\eee 이런식으로 전체 경로를 의미하고
	상대 경로는 현재 폴더로부터의 경로를 의미한다.
	여기 코드에서 상대경로를 사용하면 프로젝트 파일이 있는 폴더에 파일이 만들어지게 된다.
	(경로는 winapi 과정 들어가서 깊게 배울 예정.)



	* 3번 인자는 Mode가 들어간다.

	모드는 2자리의 알파벳을 조합하여 만들어낸다.
	첫번째 알파벳은 w, r, a
	w(write) : 파일을 만들 때 사용한다.
	r(read) : 만들어져 있는 파일을 읽을 때 사용한다.
		파일이 없으면 에러가 발생한다. File스트림이 nullptr로 들어오게 된다.
	a(append) : 파일이 있으면 해당 파일을 연다. 파일이 있다면
		해당 파일의 가장 뒤에 새로 추가해서 넣어준다.
		파일이 없으면 새로 만들어 준다.

	두번째 알파벳: t, b
	t: 텍스트 파일을 만들어준다.
	b: 바이너리 파일을 만들어준다.

	r+ : 파일이 있으면 해당 파일을 읽고 쓰기 둘다 가능하게 열어준다. 
		파일이 없으면 에러를 발생한다.
	w+ : 파일이 있으면 해당 파일을 읽고 쓰기 둘다 가능하게 열어준다.
		단, 파일이 없으면 새로 만들어준다.
	a+ : 파일이 있으면 맨 끝부터 읽고 쓰기가 가능하다.
		파일이 없으면 새로 만들어준다.

	결국 최종적으로 들어갈 수 있는 모드는
	w, r, a, wt, rt, at, wb, rb, ab, r+ , w+, a+
	이렇게 들어갈 수 있다.
	*/
	fopen_s(&File, "Text.txt", "wt");
	
	//문제가 있을 경우 File은 nullptr로 들어오게 된다.
	if (File)
	{
		//파일에 문자 하나를 추가해주는 기능이다.
		fputc('A', File);

		//파일에 문자열을 추가해주는 기능이다.
		fputs("\n파일에 추가할 수 있습니다.",File);





		//파일 스트림을 열어주었다면 반드시 마지막에
		//닫아주어야 한다.
		fclose(File);
	}


	fopen_s(&File, "Test.txt", "rt");

	if(File)


	return 0;
}