Notice
Recent Posts
Recent Comments
Link
거의 알고리즘 일기장
파일 입출력 기본 _ 아스키 파일, 바이너리 파일 본문
아스키 파일, 바이너리 파일 특징
아스키 파일 : 입출력이 상대적으로 간단함, 느림
바이너리 파일 : 입출력이 상대적으로 복잡함, 빠름
( 바이너리 파일은 이진수로 저장되기 때문에 데이터가 어디까진지 알수가없음 그래서 데이터를 몇개를 보낼건지 보내는 사람, 읽는 사람 모두 알고있어야 한다는 불편함이 있다. )
아스키파일 입출력 코드
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
//write, read밑에 if문 true, false를 이용해서 마음대로 조절하세요.
//수동으로 닫을 수도 있지만 이렇게 하는경우가 많음
//write
if(false)
{
ofstream ofs("my_first_file.dat");
//ofs.open("my_first_file.dat");
if (!ofs)
{
cerr << "Cannot open file" << endl;
exit(1);
}
ofs << "Line 1" << endl;
ofs << "Line 2" << endl;
ofs << "Hahaha!!" << endl;
//ofs.close();
}
//read
if(true)
{
//default : 아스키코드
ifstream ifs("my_first_file.dat");
if (!ifs)
{
cerr << "Cannot open file" << endl;
exit(1);
}
while (ifs)
{
string str;
getline(ifs, str);
cout << str << endl;
}
}
return 0;
}
바이너리파일 입출력 코드
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
//write, read밑에 if문 true, false를 이용해서 마음대로 조절하세요.
//수동으로 닫을 수도 있지만 이렇게 하는경우가 많음
//write
if(true)
{
//모드가 여러가지임 ios::app는 원래있는 것에 추가, default는 덮어쓰기
ofstream ofs("my_first_file.dat");
//ofs.open("my_first_file.dat");
if (!ofs)
{
cerr << "Cannot open file" << endl;
exit(1);
}
const unsigned num_data = 10;
//쓰는 파일이 몇개인지 사이즈를 미리 저장
ofs.write((char*)&num_data, sizeof(num_data));
for (int i = 0; i < num_data; i++)
ofs.write((char*)&i, sizeof(i));
//ofs.close();
}
//read
if(true)
{
ifstream ifs("my_first_file.dat");
if (!ifs)
{
cerr << "Cannot open file" << endl;
exit(1);
}
unsigned num_data = 0;
//몇개의 데이터인지 사이즈를 미리 읽음
ifs.read((char*)&num_data, sizeof(num_data));
for (unsigned i = 0; i < num_data; i++)
{
int num;
ifs.read((char*)&num, sizeof(num));
cout << num << endl;
}
}
return 0;
}
참조
홍정모의 따라하며 배우는 c++ 참고
반응형
'c++ 문법' 카테고리의 다른 글
람다함수와 std::function (0) | 2020.05.06 |
---|---|
파일의 임의 위치 접근하기 (0) | 2020.05.06 |
정규 표현식 (0) | 2020.05.02 |
흐름상태와 입력 유효성 검사 (0) | 2020.05.02 |
stringstream 기본용법 (0) | 2020.05.02 |
Comments