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;
}