dcdd144598 2011-02-23 kinaba: #include "stdafx.h" dcdd144598 2011-02-23 kinaba: #include "log.h" dcdd144598 2011-02-23 kinaba: #include "app.h" dcdd144598 2011-02-23 kinaba: #include "string.h" dcdd144598 2011-02-23 kinaba: using namespace ki; dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: //========================================================================= dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: void Logger::WriteLine( const String& str ) dcdd144598 2011-02-23 kinaba: { dcdd144598 2011-02-23 kinaba: WriteLine( str.c_str(), str.len()*sizeof(TCHAR) ); dcdd144598 2011-02-23 kinaba: } dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: void Logger::WriteLine( const TCHAR* str ) dcdd144598 2011-02-23 kinaba: { dcdd144598 2011-02-23 kinaba: WriteLine( str, ::lstrlen(str)*sizeof(TCHAR) ); dcdd144598 2011-02-23 kinaba: } dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: void Logger::WriteLine( const TCHAR* str, int siz ) dcdd144598 2011-02-23 kinaba: { dcdd144598 2011-02-23 kinaba: #ifdef DO_LOGGING dcdd144598 2011-02-23 kinaba: // Fileクラス自体のデバッグに使うかもしれないので、 dcdd144598 2011-02-23 kinaba: // Fileクラスを使用することは出来ない。API直叩き dcdd144598 2011-02-23 kinaba: static bool st_firsttime = true; dcdd144598 2011-02-23 kinaba: DWORD dummy; dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: // ファイル名 dcdd144598 2011-02-23 kinaba: TCHAR fname[MAX_PATH]; dcdd144598 2011-02-23 kinaba: ::GetModuleFileName( ::GetModuleHandle(NULL), fname, countof(fname) ); dcdd144598 2011-02-23 kinaba: ::lstrcat( fname, TEXT("_log") ); dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: // ファイルを書き込み専用で開く dcdd144598 2011-02-23 kinaba: HANDLE h = ::CreateFile( fname, dcdd144598 2011-02-23 kinaba: GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_ALWAYS, dcdd144598 2011-02-23 kinaba: FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, NULL ); dcdd144598 2011-02-23 kinaba: if( h == INVALID_HANDLE_VALUE ) dcdd144598 2011-02-23 kinaba: return; dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: // 初回限定処理 dcdd144598 2011-02-23 kinaba: if( st_firsttime ) dcdd144598 2011-02-23 kinaba: { dcdd144598 2011-02-23 kinaba: ::SetEndOfFile( h ); dcdd144598 2011-02-23 kinaba: #ifdef _UNICODE dcdd144598 2011-02-23 kinaba: ::WriteFile( h, "\xff\xfe", 2, &dummy, NULL ); dcdd144598 2011-02-23 kinaba: #endif dcdd144598 2011-02-23 kinaba: st_firsttime = false; dcdd144598 2011-02-23 kinaba: } dcdd144598 2011-02-23 kinaba: else dcdd144598 2011-02-23 kinaba: { dcdd144598 2011-02-23 kinaba: ::SetFilePointer( h, 0, NULL, FILE_END ); dcdd144598 2011-02-23 kinaba: } dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: // 書く dcdd144598 2011-02-23 kinaba: ::WriteFile( h, str, siz, &dummy, NULL ); dcdd144598 2011-02-23 kinaba: ::WriteFile( h, TEXT("\r\n"), sizeof(TEXT("\r")), &dummy, NULL ); dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: // 閉じる dcdd144598 2011-02-23 kinaba: ::CloseHandle( h ); dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: #endif dcdd144598 2011-02-23 kinaba: }