Partager via


Utilisation de flux

L’exemple de cette rubrique montre comment utiliser des flux de système de fichiers NTFS de base.

Cet exemple crée un fichier, appelé « TestFile », d’une taille de 16 octets. Toutefois, le fichier a également un type de flux ::$DATA supplémentaire, nommé « Stream », qui ajoute 23 octets supplémentaires qui ne sont pas signalés par le système d’exploitation. Par conséquent, lorsque vous affichez la propriété de taille de fichier pour le fichier, vous voyez uniquement la taille du flux par défaut ::$DATA pour le fichier.

#include <windows.h>
#include <stdio.h>

void main( )
 {
  HANDLE hFile, hStream;
  DWORD dwRet;

  hFile = CreateFile( TEXT("TestFile"), // Filename
                      GENERIC_WRITE,    // Desired access
                      FILE_SHARE_WRITE, // Share flags
                      NULL,             // Security Attributes
                      OPEN_ALWAYS,      // Creation Disposition
                      0,                // Flags and Attributes
                      NULL );           // OVERLAPPED pointer
  if( hFile == INVALID_HANDLE_VALUE )
   {
    printf( "Cannot open TestFile\n" );
    return;
   }
  else
   {
    WriteFile( hFile,              // Handle
               "This is TestFile", // Data to be written
               16,                 // Size of data, in bytes
               &dwRet,             // Number of bytes written
               NULL );             // OVERLAPPED pointer
    CloseHandle( hFile );
    hFile = INVALID_HANDLE_VALUE;
   }

  hStream = CreateFile( TEXT("TestFile:Stream"), // Filename
                        GENERIC_WRITE,           // Desired access
                        FILE_SHARE_WRITE,        // Share flags
                        NULL,                    // Security Attributes
                        OPEN_ALWAYS,             // Creation Disposition
                        0,                       // Flags and Attributes
                        NULL );                  // OVERLAPPED pointer
  if( hStream == INVALID_HANDLE_VALUE )
    printf( "Cannot open TestFile:Stream\n" );
  else
   {
    WriteFile( hStream,                   // Handle
               "This is TestFile:Stream", // Data to be written
               23,                        // Size of data
               &dwRet,                    // Number of bytes written
               NULL);                     // OVERLAPPED pointer
    CloseHandle( hStream );
    hStream = INVALID_HANDLE_VALUE;
   }
}

Si vous tapez Type TestFile à l’invite de commandes, la sortie suivante s’affiche :

This is TestFile

Toutefois, si vous tapez les mots Type TestFile:Stream, l’erreur suivante est générée :

« La syntaxe du nom de fichier, du répertoire ou de l’étiquette de volume est incorrecte. »

Pour afficher ce qui se trouve dans TestFile:stream, utilisez l’une des commandes suivantes :

Plus < TestFile:Stream

Plus < TestFile:Stream:$DATA

Le texte affiché est le suivant :

This is TestFile:Stream

Flux de fichiers