2010-11-18 16 views
0

Ich versuche, den TRACE Makro zu verwenden, um den Dateinamen an das Ausgabefenster zu senden. Die folgende compiliert, aber wenn es ausführt, statt der gewünschten Ausgabe, bekomme ich einen Fehler im Ausgabefenster:Fehler bei der Verwendung von TRACE zur Ausgabe des Dateinamens

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

Produziert Fehler:

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

Ich bin sicher, es zu tun hat mit das __FILE__ Makro, aber ich bin mir nicht sicher, was genau falsch ist. Weiß jemand, wie das funktioniert? Vielen Dank.

Antwort

1

Ist es nicht, dass Sie eine breite Zeichenfolge Version von FILE brauchen, um das richtig zu machen?

#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

Danke, das ist großartig! Weißt du, ob es einen Weg gibt, nur den Dateinamen und nicht den ganzen Pfad zu erhalten? –

+0

Ich bearbeitet den Post mit einer Funktion, um Datei und Pfad in einer eigenen Zeichenfolge zu erhalten. – ROAR

Verwandte Themen