#include <iostream>
enum class EItemType
{
Weapon,
Armor
};
struct ItemInfo
{
char Name[32];
EItemType Type;
int Option;
int Price;
int Sell;
};
int main()
{
FILE* File = nullptr;
fopen_s(&File, "Test.txt", "rb");
if (File)
{
//3번인자: 기준점을 정한다.
//SEEK_END: 파일의 가장 끝
//SEEK_SET: 파일의 시작점
//SEEK_CUR: 현재 파일커서
//
//2번인자는 Offset으로, 3번인자에 지정된 지점으로부터
// 몇 바이트만큼 떨어진 곳을 커서의 위치로 지정할지를 정한다.
//아래는 파일 커서를 가장 끝으로 보낸다.
fseek(File, 0, SEEK_END);
//ftell은 현재 파일 커서의 위치를 받아온다.
int FileSize = ftell(File);
//파일 커서의 가장 끝의 위치를 받아왔음 --> 파일의 크기를 알 수 있다.
//읽어왔으면 다시 파일 커서를 다시 처음으로 옮겨서 파일의 내용을 읽어올 수 있도록 한다.
fseek(File, 0, SEEK_SET);
int Number = 0;
// 1번 인자 : 읽어오고자 하는 메모리 주소
// 2번 인자 : 읽어오고자 하는 데이터의 타입 크기
// 3번 인자 : 읽어오고자 하는 데이터 개수
fread(&Number, sizeof(int), 1, File);
std::cout << Number << std::endl;
int Array[10] = {};
fread(Array, sizeof(int), 10, File);
for (int i = 0; i < 10; ++i)
{
std::cout << Array[i] << std::endl;
}
ItemInfo Item = {};
fread(&Item, sizeof(ItemInfo), 1, File);
std::cout << "아이템이름 : " << Item.Name << std::endl;
std::cout << "종류 : ";
switch (Item.Type)
{
case EItemType::Weapon:
std::cout << "무기" << std::endl;
break;
case EItemType::Armor:
std::cout << "방어구" << std::endl;
break;
}
std::cout << "옵션 : " << Item.Option << std::endl;
std::cout << "Price : " << Item.Price << std::endl;
std::cout << "Sell : " << Item.Sell << std::endl;
fclose(File);
}
//앞으로 자주 사용하게 될 예정.
//실무에서도 이거 자주 사용함.
return 0;
}