С самой первой версии NTFS позволяла одному файлу иметь несколько потоков. К сожалению, этот весьма удобный механизм использовался очень слабо, хотя применение потоков позволяет изящно решать многие проблемы.
Например, вы создаете файл. Для него необходимо сформировать и сохранить эскиз (уменьшенное изображение содержимого файла, предназначенное для предварительного просмотра) (thumbnail), который, как правило, записывается в конец файла. Для вывода эскиза надо открыть файл, считать информацию заголовка, найти начало нужной вам информации и только после этого считать данные. Можно хранить эскиз в отдельном файле, но в этом случае велика вероятность того, что сам файл будет перенесен в другое место без соответствующего ему эскиза.
Подобную проблему можно решить с использованием нескольких потоков. При создании файла основные данные следует записать в неименованный поток. Затем необходимо создать внутри того же файла именованный поток, предназначенный для данных образа. Теперь один файл будет содержать два потока.
Проведем следующий эксперимент. На машине Windows Server 2003 откроем окно командной строки. Перейдем в раздел NTFS (например, в папку, содержащую системные шрифты) и введем следующую команду (не делайте лишних пробелов!): С:\WINDOWS\Fonts>dir > New_Stream.TXT:New_Stream
В результате выполнения этой команды система создаст файл New_Stream.TXT. Он будет содержать два потока: неименованный, в котором находится 0 байт, и именованный (с именем New_Stream), где будет находиться результат выполнения команды dir. Доступ к именованному потоку можно получить, обратившись к нему по имени через двоеточие после имени файла. В именах потоков, как и в именах файлов, имеет значение регистр символов.
К сожалению, многие утилиты, входящие в состав Windows Server 2003, не могут работать с именованными потоками. Рассмотрим, к примеру, следующую команду:
C:\WINDOWS\Fonts>dir New_Stream.TXT
Volume in drive C is WinSrv2003
Volume Serial Number is 10D5-4C68
Directory of C:\WINDOWS\Fonts