_CrtSetReportFile

使用 _CrtSetReportMode 指定 _CRTDBG_MODE_FILE 之後,您可以指定要接收訊息文字的檔案控制代碼。 _CrtSetReportFile 也由 _CrtDbgReport_CrtDbgReportW 使用,以指定文字的目的地 (僅限偵錯版本)。

語法

_HFILE _CrtSetReportFile(
   int reportType,
   _HFILE reportFile
);

參數

reportType
報表類型:_CRT_WARN_CRT_ERROR_CRT_ASSERT

reportFile
reportType 的新報表檔案。

傳回值

成功完成時,_CrtSetReportFile 會傳回為 reportType 中指定之報表類型定義的先前報表檔案。 如果針對 reportType 傳入的值無效,則此函式會叫用無效的參數處理常式,如參數驗證中所述。 若允許繼續執行,errno 會設為 EINVAL ,而函式會傳回 _CRTDBG_HFILE_ERROR。 如需詳細資訊,請參閱errno, _doserrno, _sys_errlist_sys_nerr.

備註

_CrtSetReportFile 可搭配 _CrtSetReportMode 函式使用,以定義 _CrtDbgReport 所產生之特定報表型別的一或多個目的地。 當您呼叫 _CrtSetReportMode 以指派特定報表型別的 _CRTDBG_MODE_FILE 報告模式時,也呼叫 _CrtSetReportFile 來指定目的地檔案或資料流。 若未定義 _DEBUG,將會在前置處理期間移除對 _CrtSetReportFile 的呼叫。

下表顯示 reportFile 的可用選項及 _CrtDbgReport 的結果行為。 這些選項在 Crtdbg.h 中定義為位元旗標。

  • 檔案控制代碼

    將作為訊息目的地的檔案控制代碼。 不會嘗試驗證此控制代碼的有效性。 您必須開啟和關閉檔案控制代碼。 例如:

    HANDLE hLogFile;
    hLogFile = CreateFile("c:\\log.txt", GENERIC_WRITE,
        FILE_SHARE_WRITE, NULL, CREATE_ALWAYS,
        FILE_ATTRIBUTE_NORMAL, NULL);
    _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE);
    _CrtSetReportFile(_CRT_WARN, hLogFile);
    
    _RPT0(_CRT_WARN,"file message\n");
    CloseHandle(hLogFile);
    
  • _CRTDBG_FILE_STDERR

    將訊息寫入至可如下重新導向的 stderr

    freopen( "c:\\log2.txt", "w", stderr);
    _CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_FILE);
    _CrtSetReportFile(_CRT_ERROR, _CRTDBG_FILE_STDERR);
    
    _RPT0(_CRT_ERROR,"1st message\n");
    
  • _CRTDBG_FILE_STDOUT

    將訊息寫入至您可以重新導向的 stdout

  • _CRTDBG_REPORT_FILE

    傳回目前的報表模式。

您可以分別控制每個報表型別分別使用的報表檔案。 例如,您可以透過 stderr 指定 _CRT_ERROR 報表的 reportType,而透過使用者定義的檔案控制代碼或資料流來指定 _CRT_ASSERT 報表的 reportType

需求

常式 必要的標頭 選擇性標頭
_CrtSetReportFile <crtdbg.h> <errno.h>

通用 Windows 平台 (UWP) 應用程式中不支援主控台。 與主控台 stdinstdoutstderr 相關聯的標準資料流控制代碼必須重新導向,之後 C 執行階段函式才能在 UWP 應用程式中使用它們。 如需相容性詳細資訊,請參閱相容性

程式庫:僅限偵錯版本的 CRT 程式庫功能

另請參閱

偵錯常式