Menggunakan Stream

Contoh dalam topik ini menunjukkan cara menggunakan aliran sistem file NTFS dasar.

Contoh ini membuat file, yang disebut "TestFile," dengan ukuran 16 byte. Namun, file juga memiliki jenis aliran ::$DATA tambahan, bernama "Stream" yang menambahkan 23 byte tambahan yang tidak dilaporkan oleh sistem operasi. Oleh karena itu, saat Anda melihat properti ukuran file untuk file, Anda hanya melihat ukuran default ::$DATA stream untuk file.

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

Jika Anda mengetik Ketik TestFile pada prompt perintah, perintah akan menampilkan output berikut:

This is TestFile

Namun, jika Anda mengetik kata Ketik TestFile:Stream, itu menghasilkan kesalahan berikut:

"Sintaks nama file, nama direktori, atau label volume salah."

Untuk melihat apa yang ada di TestFile:stream, gunakan salah satu perintah berikut:

TestFile Lainnya < :Stream

TestFile Lainnya < :Stream:$DATA

Teks yang ditampilkan adalah sebagai berikut:

This is TestFile:Stream

Aliran File