Conversione dei dati da un file di log in formato binario a un file di log in formato CSV
L'esempio seguente trasferisce i dati da un file di log contatore creato dallo strumento Prestazioni a un formato delimitato da virgole (.csv). L'esempio trasferisce i dati del contatore time del processore raccolti dal computer locale. Per specificare un altro tipo di dati del contatore, modificare la variabile szCounterPath. Se i dati del contatore raccolti provengono da un computer specifico, aggiungere il nome del computer al percorso , ad esempio "\<>nome computer\\Processor(0)\\% Processore Time").
#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);
}