Fehlercode Fopen_s -> Logdatei schreiben

Dolphon

Erfahrenes Mitglied
Hallo,

bei dem Versuch eine Datei zu öffnen wird als "errno_t Wert" folgendes zurückgeliefert:

hr=0000000d

Somit ist ein Fehler aufgetreten, da bei Erfolg eine 0 der Rückgabewert wäre.
Nun kann ich damit aber absolut nichts anfangen. Weiß einer was für ein Fehler das ist? Was mich auch Iritiert ist, dass er doch eigentlich dann in die If-Bedingung erfüllt sein müsste.

Mir würde es auch schon Weiterhelfen, wenn ich wüsste was in der Variablen "m_LogFile" stehen würde. Da es sich aber um einen Zeiger handelt, weiß ich nicht wie die Debugausgabe lauten muss.

Ich nehme stark an, das m_LogFile nicht richtig gesetzt wird, und er daher in der Methode Log() nichts in Logdatei schreiben kann. Auf die Debug Konsole werden die zu schreibenden DAten ausgegeben.

Hier einmal der Coderteil:

C++:
...
FILE*               m_LogFile;
...

CLogFile::CLogFile()
{
	m_LogFile=NULL; 
	m_Initialized=false; //Not Use in this Filter
	DBGTRACEF("Konstrucktor CLogfile");
}

HRESULT CLogFile::OpenLog(LPCSTR pszLogFileName)
{
   ......
    // Open the log file
	DBGTRACEF(("Opening log file %s\n",szExpLogFileName));
//#if (_MSC_VER >= 1400 )  //For compiling with VS2005
     HRESULT hr = fopen_s(&m_LogFile , szExpLogFileName,"w");
      DBGTRACEF(("Opening LogFile, hr=%08x \n",hr));
	 if (!hr)
     {
		 DBGTRACE("Failed to open log file:\n");
        return E_FAIL;
     }
//#endif

    return S_OK;
}

void CLogFile::Log(__in char* formatStr,...)
{
	va_list ArgList;
	va_start(ArgList, formatStr);
	DBGTRACE("Befor Logfile written\n");
	//DBGTRACEF(("m_LogFile is:  %s\n",m_LogFile));
	if (m_LogFile != NULL)
	{
	    vfprintf(m_LogFile,formatStr, ArgList);
		DBGTRACE("Logfile written\n");
		Flush();
    }
#ifdef _DEBUG
    // in debug, also print everything to the debug console
    PrintTraceWithArgs(formatStr, ArgList);
#endif
	va_end(ArgList);
}
 
Zuletzt bearbeitet von einem Moderator:
Danke für deine Antwort.

EDIT!! Habe eben noch gemerkt, dass er die Datei garnicht erst anlegt. Aber trotzdem 0 als Rückgabewert gibt.

ich habe einmal ein bisschen rumprobiert und eine komisches Verhalten Festgestellt.
Wenn der Rückgabewert 0000000 ist, dann sagt er mir Logfile kann nicht geöffnet werden. Wobei wenn 0 der Rückgabewert ist, kein Fehler aufgetreten ist.

Daher habe ich den Code zu folgenden abgeändert:

C++:
DBGTRACEF(("Opening log file %s\n",szExpLogFileName));
//#if (_MSC_VER >= 1400 )  //For compiling with VS2005
     errno_t err = fopen_s(&m_LogFile , szExpLogFileName,"w");
   DBGTRACEF(("Opening LogFile, err=%08x \n",err));
     if(err != 0)
	  {
		 DBGTRACE("Failed to open log file:\n");
        return E_FAIL;
     }

Nun springt er sowie es sein soll auch in der Log() Methode in

C++:
 if (m_LogFile != NULL)
    {
        vfprintf(m_LogFile,formatStr, ArgList);
        DBGTRACE("Logfile written\n");
        Flush();
    }

rein. Allerdings ist das Logfile trotzdem leer.
Den Fehler muss ich also noch suchen.
 
Zuletzt bearbeitet von einem Moderator:
Zurück