Conversion de données d’un fichier journal au format binaire en fichier journal au format CSV
L’exemple suivant transfère les données d’un fichier journal de compteur créé par l’outil Performance à un format séparé par des virgules (.csv). L’exemple transfère les données du compteur de temps processeur collectées à partir de l’ordinateur local. Pour spécifier un autre type de données de compteur, modifiez la variable szCounterPath. Si les données de compteur collectées proviennent d’un ordinateur spécifique, ajoutez le nom de l’ordinateur au chemin d’accès (par exemple, « \\\\<nom>_ordinateur\\Processeur(0)\\% Temps du processeur »).
#include <windows.h>
#include <stdio.h>
#include <tchar.h>
#include <pdh.h>
#include <pdhmsg.h>
#pragma comment(lib, "pdh.lib")
CONST PWSTR COUNTER_PATH = L"\\Processor(0)\\% Processor Time";
void DisplayCommandLineHelp(void)
{
wprintf(L"Syntax: convertlog <input file name> <output file name>\n"
L"\nThe input log file must be in the Perfmon format. The output\n"
L"log file will written in the CSV file format, so specify a .csv extension.");
}
void wmain(int argc, WCHAR **argv)
{
HQUERY hQuery = NULL;
HLOG hOutputLog = NULL;
HCOUNTER hCounter = NULL;
PDH_STATUS pdhStatus = ERROR_SUCCESS;
DWORD dwOutputLogType = PDH_LOG_TYPE_CSV;
if (3 != argc)
{
DisplayCommandLineHelp();
goto cleanup;
}
// Create the query object using the input log file.
pdhStatus = PdhOpenQuery(argv[1], 0, &hQuery);
if (ERROR_SUCCESS != pdhStatus)
{
wprintf(L"PdhOpenQuery failed with 0x%x\n", pdhStatus);
goto cleanup;
}
// Add the counter to the query object; identifies the counter
// records from the log file that you are going to relog to
// the new log file.
pdhStatus = PdhAddCounter(hQuery,
COUNTER_PATH,
0,
&hCounter);
if (ERROR_SUCCESS != pdhStatus)
{
wprintf(L"PdhAddCounter failed with 0x%x\n", pdhStatus);
goto cleanup;
}
// Create and open the output log file.
pdhStatus = PdhOpenLog(argv[2],
PDH_LOG_WRITE_ACCESS |
PDH_LOG_CREATE_ALWAYS,
&dwOutputLogType,
hQuery,
0,
NULL,
&hOutputLog);
if (ERROR_SUCCESS != pdhStatus)
{
wprintf(L"PdhOpenLog failed with 0x%x\n", pdhStatus);
goto cleanup;
}
// Transfer the log records from the input file to the output file.
while (ERROR_SUCCESS == pdhStatus)
{
pdhStatus = PdhUpdateLog(hOutputLog, NULL);
}
if (PDH_NO_MORE_DATA != pdhStatus)
{
wprintf(L"PdhUpdateLog failed with 0x%x\n", pdhStatus);
}
cleanup:
// Close the output log file.
if (hOutputLog)
PdhCloseLog(hOutputLog, 0);
// Close the query object and input log file.
if (hQuery)
PdhCloseQuery(hQuery);
}