일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Flutter
- C언어 포인터
- github
- c#
- jupyter
- docker
- gitlab
- C# delegate
- c# 추상 클래스
- 깃
- jupyter lab
- vim
- c# 윈폼
- HTML
- 플러터
- Algorithm
- 도커
- Data Structure
- git
- c언어
- 포인터
- dart 언어
- 다트 언어
- Houdini
- Unity
- c# winform
- Python
- 구조체
- C++
- 유니티
- Today
- Total
nomad-programmer
[Programming/C] 파일 사용 형식 본문
형식 |
설명 |
t |
텍스트 속성으로 파일을 사용하겠다는 뜻. 이것으로 바이너리 파일을 열면 오류 발생. 이유는 텍스트 파일은 EOF라는 아스키 값을 사용하여 파일의 끝을 구별하는데 바이러니 파일에서는 찾을 수 없다. |
b |
바이너리 속성의 파일을 사용한다는 뜻. 이 형식이 기본값. 그러므로 형식 지정에 t 또는 b가 없다면 기본적으로 바이너리 형식을 사용한다고 보면 된다. |
파일 내용 읽기 모드 "r"
파일의 내용을 읽기(Read)위한 목적으로 파일을 연다.
FILE* file = fopen("tmp.bin", "rb");
FILE* file = fopen("tmp.txt", "rt");
파일 데이터 쓰기 모드 "w"
파일에 데이터를 쓰기(Write)위한 목적으로 파일을 연다. 만약 파일이 지정한 경로에 없다면 그 이름으로 파일을 생성한 후 연다. 그러므로 "w" 형식을 사용하면 파일 열기에 실패하지 않는다.
하지만 같은 이름을 가진 파일이 이미 존재하는 경우, 파일을 열면서 그 파일이 가지고 있던 내용을 모두 지우고 시작하기 때문에 주의해야 한다.
FILE* file = fopen("tmp.bin", "wb");
FILE* file = fopen("tmp.txt", "wt");
파일 데이터 이어 쓰기 모드 "a"
파일에 데이터를 확장(Append)하기 위한 목적으로 파일을 연다. 만약 파일이 지정한 경로에 없다면 그 이름으로 파일을 생성한 후 연다. 그로므로 "a" 형식을 사용하면 파일 열기에 실패하지 않는다.
"w" 속성과 달리 기존에 파일이 존재하더라도 파일 내용을 지우지 않고 기존 파일 내용에 이어 쓰기를 한다.
FILE* file = fopen("tmp.bin", "ab");
FILE* file = fopen("tmp.txt", "at");
파일 사용 형식에서 읽기와 쓰기를 같이 사용
읽기 강조 "r+"
읽기와 쓰기를 같이 사용할 때 "읽기"를 더 강조하는 형식. 이것으로 파일을 여는 경우 기존 파일이 없으면 파일을 새로 만들지 않고 파일 읽기에 실패한다.
기존 파일이 있는 경우에는 해당 파일의 내용을 지우지 않지만 기존 데이터의 위치로 이동해서 해당 위치의 내용을 덮어쓸 수 있다.
// a+, ab+, a+b 등으로 쓸 수 있다.
FILE* file = fopen("tmp.bin", "r+b");
FILE* file = fopen("tmp.txt", "r+t");
쓰기 강조 "w+"
읽기와 쓰기를 같이 사용할 때 "쓰기"를 더 강조하는 형식. 이것으로 파일을 여는 경우 기존 파일이 없으면 파일을 새로 만들고, 파일이 이미 존재하면 기존 파일의 내용을 모두 지우고 시작한다.
// w+, wb+, w+b 등으로 쓸 수 있다.
FILE* file = fopen("tmp.bin", "w+b");
FILE* file = fopen("tmp.txt", "w+t");
읽기와 이어 쓰기를 같이 사용하는 "a+"
읽기 모드와 이어 쓰기 모드를 같이 사용해야 하는 경우에 사용하며 "이어 쓰기" 를 더 강조하는 형식. 이어 쓰기를 더 강조한다는 뜻은 이 형식으로 파일을 여는 경우 기존 파일이 없으면 파일을 새로 만들고 파일이 존재하면 파일의 내용을 지우지 않고 기존 내용에 이어서 시작한다는 뜻이다.
하지만 "r+" 와 달리 기존 데이터 위치로 이동할 수 있고 읽기도 가능하지만 쓰기를 사용하면 현재 위치와 상관없이 파일의 끝에 내용이 추가된다.
// a+, ab+, a+b 등으로 쓸 수 있다.
FILE* file = fopen("tmp.bin", "a+b");
FILE* file = fopen("tmp.txt", "a+t");
읽기와 쓰기를 같이 사용하려면 "r+"나 "w+"와 같이 적어야 하는데 "rw" 라고 적기도 한다. 허나 "rw"는 표준이 아니다.
때문에 컴파일러에 따라 "r+"나 "w+"로 자동 변환하거나 fopen함수의 실행이 실패한다. 따라서 위에 나열한 형식 중 하나를 선택해서 사용해야 한다.
'Programming > C' 카테고리의 다른 글
[Programming/C] 함수 포인터(Function Pointer) (0) | 2020.06.16 |
---|---|
[Programming/C] fseek, ftell 함수 (0) | 2020.06.16 |
[Programming/C] 구조체 멤버 정렬 (Struct Member Alignment) (0) | 2020.06.14 |
[C] typedef (0) | 2020.06.14 |
[C] 3차원 배열 같은 3차원 포인터의 동적 할당 (0) | 2020.06.13 |