2010-11-18 20 views
0

TRACEマクロを使用してファイル名を出力ウィンドウに送信しようとしています。コンパイルを次、それが実行されたとき、代わりに所望の出力を、私は出力ウィンドウにエラーが表示されます。出力ファイル名にTRACEを使用するとエラーが発生する

TRACE(_T("Trace test.\r\n\tError: %d\r\n\tFile: %s\r\n\tLine: %d\r\n"), ERROR_SUCCESS, __FILE__, __LINE__); 

が生成し、エラー:

_CrtDbgReport: String too long or IO ErrorFirst-chance exception at 0x7c812afb in MyApp.exe: Microsoft C++ exception: long at memory location 0x0012fe18..

私はそれが関係していると確信しています__FILE__マクロですが、私は正確に何が間違っているのか分かりません。誰もがどのようにこれを動作させる知っていますか?ありがとう。

答えて

1

それを得るにはFILEのワイド文字列バージョンが必要なのですか?

#define WIDEN2(x) L ## x 
#define WIDEN(x) WIDEN2(x) 
#define __WFILE__ WIDEN(__FILE__) 
wchar_t *pwsz = __WFILE__; 

wprintf(pwsz) 

// Function to split path into file and directory parts.. 
void ExtractFileNameFromPath(const std::wstring &_sPath,std::wstring &_sFilename,std::wstring &_sDirectory) 
{ 
    int iPos = _sPath.rfind('\\'); 
    if(iPos == std::_tstring::npos) iPos = _sPath.rfind(TCHAR("/")); 
    if(iPos != std::_tstring::npos) 
    { _sFilename = _sPath.substr(iPos + 1); _sDirectory = _sPath.substr(0,iPos); } 
    else _sFilename = _sPath; 
    nsStringTools::Trim(_sFilename); 
    nsStringTools::Trim(_sDirectory); 
    if(_sDirectory[_sDirectory.length()-1] != _T('\\')) 
     _sDirectory += _T("\\"); 
} 
+0

ありがとう、これは素晴らしいです!パス全体ではなくファイル名だけを取得する方法があるかどうかを知っていますか? –

+0

ファイルとパスを独自の文字列で取得する関数を使って投稿を編集しました。 – ROAR

関連する問題