파일 읽기/쓰기 - txt(텍스트)
* 프로그램 내부 데이터를 파일을 만들어 읽고 쓰기
1. 세이브(데이터 쓰기) 아이디어
- 저장하고 싶은 데이터를 문자열에 초기화 해둔다.
- HANDLE 과 DWORD를 선언
- 선언한 핸들에 CreateFile()함수를 이용하여 파일을 생성(메모리에 선언하는 것 같다)
- 생성한 파일에 WriteFile()을 이용하여 데이터를 쓴다
- CloseHandle()로 선언한 헨들을 닫아준다.
void txtData::txtSave(const char * fileName, vector<string> vStr)
{
HANDLE file;
DWORD write;
char str[128];
ZeroMemory(str, sizeof(str));
strcpy(str, vectorArrayCombine(vStr));
file = CreateFile(fileName, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
WriteFile(file, str, 128, &write, NULL);
CloseHandle(file);
}
2. 로드(데이터 읽기) 아이디어
- 읽어온 데이터를 저장할 문자열 선언
- HANDLE과 DWORD를 선언
- CreateFile()로 헨들에 파일 공간을 생성한다
- ReadFile()로 파일에 있는 값을 선언해둔 문자열에 저장한다.
- 해당 문자열의 데이터를 리턴한다.
vector<string> txtData::txtLoad(const char * fileName)
{
HANDLE file;
DWORD read;
char str[128];
ZeroMemory(str, sizeof(str));
file = CreateFile(fileName, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
ReadFile(file, str, 128, &read, NULL);
CloseHandle(file);
//가나다;라마바
return charArraySeparation(str);
}
참고) 여러 데이터를 읽고 쓰기 위해 각 데이터를 구분할 수 있도록 구분자를 만들어 데이터간 분리를 해주어야 한다.
char * txtData::vectorArrayCombine(vector<string> vArray)
{
char str[128];
ZeroMemory(str, sizeof(str));
for (int i = 0; i < vArray.size(); i++)
{
strcat(str, vArray[i].c_str());
if (i + 1 < vArray.size())
{
strcat(str, ";");
}
}
return str;
}
vector<string> txtData::charArraySeparation(char charArray[])
{
vector<string> vArray;
const char* separator = ";";
char* token;
token = strtok(charArray, separator);
vArray.push_back(token);
while (NULL != (token = strtok(NULL, separator)))
{
vArray.push_back(token);
}
return vArray;
}
참고 : (atoi / atof / atol / atoll)와 (itoa/ ltoa) 를 이용해서 형변환을 해줘야 한다.
https://paynter1127.blogspot.com/2019/10/atoi-atof-atol-atoll-itoa-ltoa.html
댓글
댓글 쓰기