Partager via


IJournalReader::ReadFromStream, méthode

Prend un flux vers un fichier note de journal et retourne un flux XML représentant le contenu du document.

Notes

Le composant Lecteur de journal ne peut pas lire les fichiers journaux Windows créés par des machines exécutant Windows 7 ou version ultérieure. L’interface IJournalReader doit être considérée comme déconseillée ou obsolète et ne doit pas être utilisée.

Syntaxe

HRESULT ReadFromStream(
  [in]          IStream *pJournalFileStream,
  [out, retval] IStream **ppXmlStream
);

Paramètres

pJournalFileStream [in]

Objet IStream représentant le fichier Journal à lire.

ppXmlStream [out, retval]

Pointeur vers l’adresse d’un objet IStream qui recevra le flux XML créé en lisant le fichier Journal.

Valeur retournée

Si cette méthode réussit, elle retourne S_OK. Sinon, il retourne un code d’erreur HRESULT .

Notes

Les flux sont utilisés pour éviter l’accès direct au système de fichiers et pour permettre le choix de la méthode d’analyse XML à utiliser.

Exemples

L’exemple suivant de gestionnaire pour l’événement Click d’un bouton crée une instance de l’interface IJournalReader et l’utilise pour lire un fichier Journal existant.

void CJntlReaderMFCDlg::OnBnClickedButton1()
{
  IStream* pJntStream;
  IStream* pXmlStream;
  IJournalReader* pJntReader;
  HRESULT hr;
  CString szFileName = "";
  static char BASED_CODE szFilter[] = 
    "Journal files (*.jnt)|*.jnt|All files (*.*)|*.*";
  CFileDialog* fileDialog = new CFileDialog(TRUE, "*.jnt", NULL, 
                                 OFN_FILEMUSTEXIST, szFilter, this);

  // Get the filename from the user by using a File Open dialog
  if (IDOK == fileDialog->DoModal())
  {
    szFileName = fileDialog->GetPathName();

    // Read a JNT file into a memory buffer
    HANDLE hFile = CreateFile(szFileName.GetBuffer(), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
    
    if (INVALID_HANDLE_VALUE != hFile)
    {
      // Allocate memory to hold the file contents
      DWORD dwFileSize = GetFileSize(hFile, NULL);
      HGLOBAL hGlobal = GlobalAlloc(GHND, dwFileSize);

      if (hGlobal != NULL)
      {
        LPBYTE pData = (LPBYTE)GlobalLock(hGlobal);

        if (pData != NULL)
        {
          DWORD dwRead;

          // Read the Journal file into the pData buffer
          if (ReadFile(hFile, pData, dwFileSize, &dwRead, NULL) && dwRead == dwFileSize)
          {
            // Create an IStream that points to the buffer
            hr = CreateStreamOnHGlobal(hGlobal, FALSE, &pJntStream);

            if (SUCCEEDED(hr))
            {
              // Create a JournalReader object
              hr = CoCreateInstance(CLSID_JournalReader, NULL, CLSCTX_ALL, 
                          IID_IJournalReader, (void**)&pJntReader);

              if (SUCCEEDED(hr))
              {
                // Read in the JNT file by using the JournalReader
                hr = pJntReader->ReadFromStream(pJntStream, &pXmlStream);

                // Display results
                if (SUCCEEDED(hr))
                {
                  DisplayXml(pXmlStream);
                }

                // Clean up
                pXmlStream->Release();
                pJntReader = NULL;
                pJntStream->Release();
              }
            }
          }
          GlobalUnlock(hGlobal);
        }
        GlobalFree(hGlobal);
      }
    }
  }
}

Spécifications

Condition requise Valeur
Client minimal pris en charge
Windows XP Édition Tablet PC [applications de bureau uniquement]
Serveur minimal pris en charge
Aucun pris en charge
En-tête
Journal.h (nécessite également journal_i.c)
DLL
Journal.dll

Voir aussi

IJournalReader Interface

Informations de référence sur le schéma du lecteur de journal