2018년 8월 14일 화요일

[MFC] 파일입출력

[출처] http://phiru.tistory.com/138

// 읽기(바이너리로 읽기) 
// 쓰기(바이너리로 쓰기)

CFile rawData;              // 읽을 파일
CFile processData,            // 쓸 파일
CFileException proEx, rawEx;        // 예외

if(!rawData.Open(strFullPath, CFile::modeRead | CFile::typeBinary, &rawEx))  // 오류 체크
{
AfxMessageBox("rawData exception!");
rawData.Close();
return;
}

if(!processData.Open(strProData, CFile::modeCreate | CFile::modeWrite | CFile::typeBinary, &proEx))
{
AfxMessageBox("ProcessData exception!");
processData.Close();
return;
}

UINT nRet = 0;                                // 읽은 크기
char buffer[KD_BUFFER_SIZE];        // 읽을 버퍼 싸이즈

while(1)
{
ZeroMemory(buffer, sizeof(buffer));
nRet = rawData.Read(buffer, sizeof(buffer)); // 읽기
if(nRet == sizeof(buffer))                                               // 읽을 데이터가 남아있다(확률적으로 맞지)
{
processData.Write(buffer, sizeof(buffer));        // 사실 이거 만들때는 조건이 있어서 일케 분류했다.
}
else // 파일이 끝부분일 경우(안맞을 확률 1/버퍼 싸이즈)
{
processData.Write(buffer, sizeof(buffer));
break;
}
}

// 다 읽고 썼으니깐 핸들 닫자
processData.Close();
rawData.Close();

// 파일 잘 되었는지 친절히 폴더도 열어주자
ShellExecute(NULL, "open", dataDir, NULL, NULL, SW_SHOWNORMAL);

------------------------------------------------------------------------------------------
std::fstream rawData;                    // 읽고 쓸 파일.(여기에서는 덮어쓰기한다. 요고 디지게 찾았다)
std::fstream headerData;                // 읽을 파일(이걸 읽어서 rawData에 덮는 식으로 예제를 짰다)

rawData.open(cFileFullPath, std::ios::binary | std::ios::out | std::ios::in);        // Open할때 바이너리, 읽고 쓰기로.
if(!rawData.is_open())    // 잘 열렸는지 인. 아니면 오류 났다고 해주자
{
// 현재 fstream은 unicode가 안되어서?? 잘 모르겠지만 경로에 한글 있음 안된다.
MessageBox("File Open Error.(Don't use Korean title)", "Error", 0);
printf("error\n");
rawData.close();
return;
}

headerData.open(cHeaderPath, std::ios::binary | std::ios::in);     // 바이너리로 하고 읽기로.
if(!headerData.is_open())
{
MessageBox("File Open Error.(Don't use Korean title)", "Error", 0);
printf("error\n");
headerData.close();
return;
}

char buffer[KD_BUFFER_SIZE];
memset(buffer, 0, sizeof(buffer));
headerData.read(buffer, sizeof(buffer));        // 읽기
int size = strlen(buffer);                            // 읽은 사이즈 한번 보고
rawData.write(buffer, sizeof(buffer));            // 쓴다. 덮어서!
rawData.flush();                                    // 적용!!
rawData.close();                            // 닫어
headerData.close();                        // 요곳도 닫어

댓글 없음:

댓글 쓰기