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
関連トピック