108 lines
2.7 KiB
C++
108 lines
2.7 KiB
C++
// FileEncoder.cpp: implementation of the CFileEncoder class.
|
|
//
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
#include "stdafx.h"
|
|
#include "FileEncoder.h"
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
// Construction/Destruction
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
CFileEncoder::CFileEncoder()
|
|
{
|
|
m_hFile = INVALID_HANDLE_VALUE;
|
|
}
|
|
|
|
CFileEncoder::~CFileEncoder()
|
|
{
|
|
CloseFile();
|
|
}
|
|
|
|
BOOL CFileEncoder::CreateFile(LPCTSTR pszFile)
|
|
{
|
|
CloseFile();
|
|
|
|
m_hFile = ::CreateFile(
|
|
pszFile,
|
|
GENERIC_WRITE,
|
|
FILE_SHARE_READ,
|
|
NULL,
|
|
CREATE_ALWAYS,
|
|
FILE_ATTRIBUTE_NORMAL,
|
|
NULL);
|
|
|
|
SetFilename( (LPTSTR)pszFile );
|
|
|
|
if( m_hFile != INVALID_HANDLE_VALUE )
|
|
{
|
|
DWORD dwWritten;
|
|
WORD unicodePrefix = 0xFEFF;
|
|
BYTE utf8Prefix[] = { 0xEF, 0xBB, 0xBF };
|
|
|
|
switch ( GetEncoding() )
|
|
{
|
|
case RF_UNICODE:
|
|
WriteFile(m_hFile, &unicodePrefix, sizeof(unicodePrefix),&dwWritten,NULL);
|
|
break;
|
|
case RF_ANSI:
|
|
// WriteFile(m_hFile, &unicodePrefix, sizeof(unicodePrefix),&dwWritten,NULL);
|
|
break;
|
|
case RF_UTF8:
|
|
WriteFile(m_hFile, utf8Prefix, sizeof(utf8Prefix),&dwWritten,NULL);
|
|
break;
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
void CFileEncoder::Write(LPCTSTR pszString, BOOL bNewLine)
|
|
{
|
|
DWORD dwWritten;
|
|
switch ( GetEncoding() )
|
|
{
|
|
case RF_UNICODE:
|
|
WriteFile( m_hFile, pszString, lstrlen(pszString)*sizeof(TCHAR),&dwWritten,NULL);
|
|
if(bNewLine)
|
|
WriteFile( m_hFile, TEXT("\r\n"), 2*sizeof(TCHAR), &dwWritten, NULL );
|
|
break;
|
|
|
|
case RF_ANSI:
|
|
{
|
|
WriteFile( m_hFile, pszString, lstrlen(pszString)*sizeof(TCHAR),&dwWritten,NULL);
|
|
if(bNewLine)
|
|
WriteFile( m_hFile, TEXT("\r\n"), 2*sizeof(TCHAR), &dwWritten, NULL );
|
|
}
|
|
break;
|
|
|
|
case RF_UTF8:
|
|
{
|
|
// Get size of buffer needed.
|
|
DWORD dwOutLen = WideCharToMultiByte( CP_UTF8, 0, pszString, -1, NULL, 0, NULL, NULL);
|
|
|
|
CHAR * pBuffer = new CHAR[dwOutLen];
|
|
dwOutLen = WideCharToMultiByte( CP_UTF8, 0, pszString, -1, pBuffer, dwOutLen, NULL, NULL );
|
|
|
|
WriteFile( m_hFile, pBuffer, dwOutLen-1,&dwWritten,NULL);
|
|
|
|
if(bNewLine)
|
|
{
|
|
CHAR newLine[]= { 0x0d, 0x0a}; // , 00 };
|
|
WriteFile( m_hFile, newLine, sizeof(newLine),&dwWritten,NULL);
|
|
}
|
|
|
|
delete pBuffer;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
void CFileEncoder::CloseFile()
|
|
{
|
|
if(m_hFile != INVALID_HANDLE_VALUE )
|
|
CloseHandle( m_hFile );
|
|
m_hFile = INVALID_HANDLE_VALUE;
|
|
}
|