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
Rubriques connexes