Streamsの使用

このトピックの例では、基本的な NTFS ファイル システム ストリームを使用する方法を示します。

この例では、サイズが 16 バイトの "TestFile" というファイルを作成します。 ただし、このファイルには、"Stream" という名前の追加の ::$DATA ストリーム型もあります。これにより、オペレーティング システムによって報告されない 23 バイトが追加されます。 したがって、ファイルのファイル サイズ プロパティを表示すると、ファイルの既定の ::$DATA ストリームのサイズのみが表示されます。

#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;
   }
}

コマンド プロンプトで 「Type TestFile」 と入力すると、次の出力が表示されます。

This is TestFile

ただし、 Type TestFile:Stream という単語を入力すると、次のエラーが生成されます。

"ファイル名、ディレクトリ名、またはボリューム ラベルの構文が正しくありません。"

TestFile:stream の内容を表示するには、次のいずれかのコマンドを使用します。

その他 < の TestFile:Stream

その他 < の TestFile:Stream:$DATA

表示されるテキストは次のとおりです。

This is TestFile:Stream

ファイル ストリーム