Microsoft Windows Server 2003. Наиболее полное руководство

Потоки - часть 2


16.04.2003 18:56 0 New_Stream.TXT 0 New_Stream.TXT

1 File(s) 0 bytes 0 bytes

0 Dir(s) 555 720 704 bytes free

Очевидно, что команда dir не видит именованный поток, поэтому она показывает, что размер файла New_Stream.TXT равен 0. Однако это не так: dir показывает только неименованный поток, размер именованного потока пользователю не показывается.

Проведем еще один эксперимент, выполним команду:

C:\WINDOWS\Fonts>dir< New_Stream.TXT:New_Stream

Volume in drive С is WinSrv2003 Volume Serial Number is 10D5-4C68

Directory of C:\WINDOWS\Fonts File Not Found

Никакой информации не выводится. Из этого эксперимента видно, что команда dir не обладает средствами обращения к именованным потокам. Для просмотра содержимого именованного потока выполните следующую команду:

C:\WINDOWS\Fonts>more < New_Stream.TXT:New_Stream

Volume in drive С is WinSrv2003 Volume Serial Number is 10D5-4C68

Directory of C:\WINDOWS\Fonts 25.03.2003 16:00 311 636 arial.ttf

25.03.2003 16:00 288 496 arialbd.ttf

25.03.2003 16:00 226 748 arialbi.ttf

25.03.2003 16:00 207 808 ariali.ttf

25.03.2003 16:00 117 028 ariblk.ttf

25.03.2003 16:00 127 596 comic.ttf

Теперь мы видим содержимое (оглавление) выбранной папки, которое было сохранено в именованном потоке с помощью команды dir > New_Stream.TXT:New_Stream.

Существует еще одно применение потоков. Предположим, что вы разрабатываете текстовый процессор. Корректируя файл, вы наверняка создадите временный файл, запишете туда все изменения, затем, когда наступит момент сохранить их, уничтожите оригинальный файл, его имя присвоите временному файлу и перенесете этот файл туда, где был расположен оригинальный файл. Весь процесс выглядит довольно просто. Однако следует помнить о том, что новый файл должен иметь то же время создания (time stamp creation), что и оригинальный файл. Кроме того, новый файл должен обладать теми же атрибутами, что и оригинальный файл. При сохранении изменений очень легко изменить один из атрибутов.

При использовании потоков все эти проблемы легко разрешаются. Все потоки в пределах одного файла имеют одни и те же атрибуты (время создания, безопасность и т. д.). Можно записывать изменения не во временный файл, а в именованный поток. Затем, при записи изменений достаточно переименовать именованный поток в неименованный, после чего с помощью средств NTFS удалить старый неименованный поток. Переименование потока должно быть выполнено в соответствии с принципом "все или ничего" (в виде транзакции — либо выполняются все операции, либо все остается в исходном состоянии).

Следует отметить, что при копировании файла, содержащего потоки, в файловую систему, не поддерживающую их (например, FAT на гибком диске), скопированы будут только данные неименованного потока.




Начало  Назад  Вперед