2025-04-27 07:49:33 -04:00

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;
}