Akışları Kullanma

Bu konudaki örnekte temel NTFS dosya sistemi akışlarının nasıl kullanılacağı gösterilmektedir.

Bu örnek, boyutu 16 bayt olan "TestFile" adlı bir dosya oluşturur. Ancak, dosya ayrıca işletim sistemi tarafından bildirilmeyen ek bir 23 bayt ekleyen "Stream" adlı ek bir ::$DATA akış türüne sahiptir. Bu nedenle, dosyanın dosya boyutu özelliğini görüntülediğinizde, yalnızca dosya için varsayılan ::$DATA akışının boyutunu görürsünüz.

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

Komut istemine Type TestFile yazarsanız, aşağıdaki çıktı görüntülenir:

This is TestFile

Ancak, Tür TestFile:Streamsözcüklerini yazarsanız, aşağıdaki hatayı oluşturur:

"Dosya adı, dizin adı veya birim etiketi söz dizimi yanlış."

TestFile:stream içindekileri görüntülemek için aşağıdaki komutlardan birini kullanın:

Daha Fazla < TestFile:Stream

Daha fazla < TestFile:Stream:$DATA

Görüntülenen metin aşağıdaki gibidir:

This is TestFile:Stream

Dosya Akışları