본문 바로가기

old drawer/C, C++, MFC

[C/C++] ReadFile, WriteFile

/******************************************************************
* Function Name | WriteFile(CString strFilePath, CString strWrite)
* Details       | 특정 경로에 데이터를 저장
* Programmer    | 김 경 환
* Parameter     |
* Return Value  | CString strFilePath, CString strWrite
*******************************************************************/
BOOL ToolDBHandler::WriteFile(CString strFilePath, CString strWrite)
{
 ofstream  outfile;
 char*   pszWrite;

 pszWrite = CStringToChar(strWrite);

 outfile.open(CStringToChar(strFilePath), ios::trunc); //기존 파일을 삭제하고 다시 만듬
 if(!outfile.is_open()){
  return FALSE; 
 }

 outfile.write(pszWrite, strWrite.GetLength());
 outfile.close();

 delete pszWrite;

 return TRUE;
}


/******************************************************************
* Function Name | ReadFile(CString strFilePath)
* Details       | 특정 경로의 데이터를 읽어들임
* Programmer    | 김 경 환
* Parameter     | CString strFilePath
* Return Value  | 읽어들인 데이터를 CString으로 반환
*******************************************************************/
CString ToolDBHandler::ReadFile(CString strFilePath)
{
 CString   strRead;
 char*   pszRead;
 ifstream  infile;
 int    length;

 infile.open(CStringToChar(strFilePath));   //해당 DB file open
 if(!infile.is_open())
 {
  CString e_str;
  e_str = L"Can not open the " + strFilePath;
  return e_str; 
 }

 length = GetFileLength(&infile);     //DB파일의 길이를 가져옴
 pszRead = new char[length+1];   

 infile.read(pszRead, length);      //DB를 읽어옴
 infile.close();


 char* strTemp = ReplaceNULL(pszRead, length);  //DB에 포함된 NULL문자를 제거
 strTemp[length] = NULL;

 strRead = CharToCString(strTemp);     //char* -> CString
 delete pszRead;

 return strRead;
}

 

/******************************************************************
* Function Name | GetFileLength(ifstream *file)
* Details       | 파일의 길이를 구해서 반환
* Programmer    | 김 경 환
* Parameter     | ifstream *file
* Return Value  | 파일 길이
*******************************************************************/
int ToolDBHandler::GetFileLength(ifstream *file)
{
 int length;

 file->seekg(0, ios::end);       //파일 읽기 처음에서 끝 위치로 Set
 length = file->tellg();        //파일 길이값 Get
 file->seekg(0, ios::beg);       //파일 읽기 처음 위치로 Set

 return length;
}