C++ 학습: 파일 입출력
파일 입출력은 프로그램이 파일과 상호작용하여 데이터를 읽고 쓰는 중요한 기능입니다. 이번 글에서는 파일 스트림, 파일 읽기와 쓰기, 그리고 파일 위치 조정에 대해 알아보겠습니다.
1. 파일 스트림: ifstream, ofstream, fstream
C++에서는 파일 입출력을 위해 표준 라이브러리 <fstream>을 사용합니다. 파일 스트림은 세 가지 주요 클래스가 있습니다:
- ifstream : 입력 파일 스트림으로, 파일에서 데이터를 읽습니다.
- ofstream : 출력 파일 스트림으로, 파일에 데이터를 씁니다.
- fstream : 입출력 파일 스트림으로, 파일에 데이터를 읽고 쓸 수 있습니다.
파일 스트림 사용 예제
#include <fstream>
using namespace std;
int main() {
// ofstream을 사용하여 파일에 쓰기
ofstream outFile("example.txt");
if (outFile.is_open()) {
outFile << "Hello, World!" << endl;
outFile << 123 << endl;
outFile.close();
} else {
cout << "파일 열기에 실패했습니다." << endl;
}
// ifstream을 사용하여 파일에서 읽기
ifstream inFile("example.txt");
string line;
if (inFile.is_open()) {
while (getline(inFile, line)) {
cout << line << endl;
}
inFile.close();
} else {
cout << "파일 열기에 실패했습니다." << endl;
}
return 0;
}
위의 예제에서 ofstream을 사용하여 "example.txt" 파일에 데이터를 쓰고, ifstream을 사용하여 같은 파일에서 데이터를 읽습니다.
2. 파일 읽기와 쓰기: 텍스트 파일과 바이너리 파일 처리
C++에서는 텍스트 파일과 바이너리 파일을 읽고 쓸 수 있습니다. 텍스트 파일은 사람이 읽을 수 있는 형식으로 데이터를 저장하고, 바이너리 파일은 이진 형식으로 데이터를 저장합니다.
- 텍스트 파일 쓰기
#include <fstream>
using namespace std;
int main() {
ofstream outFile("textfile.txt");
if (outFile.is_open()) {
outFile << "This is a text file." << endl;
outFile << "It contains lines of text." << endl;
outFile.close();
} else {
cout << "파일 열기에 실패했습니다." << endl;
}
return 0;
}
- 텍스트 파일 읽기
#include <fstream>
using namespace std;
int main() {
ifstream inFile("textfile.txt");
string line;
if (inFile.is_open()) {
while (getline(inFile, line)) {
cout << line << endl;
}
inFile.close();
} else {
cout << "파일 열기에 실패했습니다." << endl;
}
return 0;
}
- 바이너리 파일 쓰기
#include <fstream>
using namespace std;
int main() {
ofstream outFile("binaryfile.bin", ios::binary);
if (outFile.is_open()) {
int num = 123;
outFile.write(reinterpret_cast<char*>(&num), sizeof(num));
outFile.close();
} else {
cout << "파일 열기에 실패했습니다." << endl;
}
return 0;
}
- 바이너리 파일 읽기
#include <fstream>
using namespace std;
int main() {
ifstream inFile("binaryfile.bin", ios::binary);
if (inFile.is_open()) {
int num;
inFile.read(reinterpret_cast<char*>(&num), sizeof(num));
cout << "Read number: " << num << endl;
inFile.close();
} else {
cout << "파일 열기에 실패했습니다." << endl;
}
return 0;
}
위의 예제에서는 텍스트 파일과 바이너리 파일을 읽고 쓰는 방법을 보여줍니다. 텍스트 파일은 문자열을 읽고 쓰며, 바이너리 파일은 이진 데이터를 읽고 씁니다.
3. 파일 위치 조정: 파일 위치 지시자 조작
파일 위치 지시자는 파일 내에서 읽기 또는 쓰기 작업이 수행될 위치를 가리킵니다. 파일 위치 지시자를 조작하여 파일의 특정 위치로 이동할 수 있습니다.
- 파일 위치 조정 예제
#include <fstream>
using namespace std;
int main() {
// 파일에 데이터 쓰기
ofstream outFile("positionfile.txt");
if (outFile.is_open()) {
outFile << "Hello, World!" << endl;
outFile << "This is a test file." << endl;
outFile.close();
} else {
cout << "파일 열기에 실패했습니다." << endl;
}
// 파일에서 특정 위치로 이동하여 데이터 읽기
ifstream inFile("positionfile.txt");
if (inFile.is_open()) {
inFile.seekg(7, ios::beg); // 파일 시작 위치로부터 7바이트 이동
char ch;
inFile.get(ch);
cout << "Character at position 7: " << ch << endl;
inFile.close();
} else {
cout << "파일 열기에 실패했습니다." << endl;
}
return 0;
}
위의 예제에서 seekg 함수를 사용하여 파일 위치 지시자를 조작합니다. seekg 함수는 파일 위치 지시자를 설정하여 파일의 특정 위치로 이동시킵니다.
- ios::beg : 파일의 시작 위치
- ios::cur : 파일의 현재 위치
- ios::end : 파일의 끝 위치
파일 위치 지시자를 조작함으로써 파일 내에서 임의의 위치로 이동하여 데이터를 읽거나 쓸 수 있습니다.
이번 글에서는 C++의 파일 입출력에 대해 알아보았습니다. 파일 스트림, 파일 읽기와 쓰기, 파일 위치 조정을 이해하고 활용하면 파일과 상호작용하는 프로그램을 작성할 수 있습니다. 다음 단계에서는 예외 처리와 고급 기능을 학습해보세요. Happy Coding!
'프로그래밍 > C++' 카테고리의 다른 글
[C++] 11. C++의 "고급 주제(기타)" (0) | 2024.06.17 |
---|---|
[C++] 10. C++의 "예외 처리" (1) | 2024.06.17 |
[C++] 8. C++의 "표준 템플릿 라이브러리 (STL)" (0) | 2024.06.17 |
[C++] 7. C++의 "객체 지향 프로그래밍" (0) | 2024.06.17 |
[C++] 6. C++의 "구조체와 클래스" (0) | 2024.06.17 |