IJournalReader :: ReadFromStream, méthode

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

Notes

le composant de lecture du journal ne peut pas lire les fichiers journaux Windows créés par des ordinateurs exécutant Windows 7 ou une version ultérieure. L’interface IJournalReader doit être considérée comme dépréciée ou obsolète et ne doit pas être utilisée.

Syntaxe

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

Paramètres

pJournalFileStream [ dans]

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éé par la lecture du fichier journal.

Valeur retournée

Si cette méthode est réussie, elle retourne la valeur _ OK. Sinon, elle retourne un code d’erreur HRESULT .

Remarques

Flux sont utilisées 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 d’un gestionnaire pour l’événement Click d’un bouton crée une instance de l’interface d' 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);
      }
    }
  }
}

Configuration requise

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

Voir aussi

Interface IJournalReader

Référence du schéma du lecteur de journal