2010-11-18 38 views
0

Dosya adını çıkış penceresine göndermek için TRACE makrosunu kullanıyorum. derler aşağıdaki fakat çalıştırdığında yerine istenen çıktı, ben çıkış penceresinde bir hata alıyorum:Çıktı Dosya Adına TRACE Kullanılırken Hata Oluştu

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

üretir hatası:

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

Ben ile ilgisi var eminim __FILE__ makrosu, ancak tam olarak neyin yanlış olduğundan emin değilim. Bunun nasıl çalıştığını bilen var mı? Teşekkürler.

cevap

1

Bu doğru olması için FILE geniş bir dize sürümüne ihtiyacınız yok mu?

#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

Teşekkürler, bu harika! Yolun tamamını değil, sadece dosya adını almanın bir yolu olup olmadığını biliyor musunuz? –

+0

Yayını, kendi başına bir dizede dosya ve yol almak için bir işlevle düzenledim. – ROAR

İlgili konular