Объект ADO Stream

Объект ADO Stream представляет поток двоичных данных или текста.

В этом справочнике объект ADO Stream рассматривается только как расширение объекта FileSystemObject и можно получить из URL-адреса, указывающего на файл, содержащий двоичные или текстовые данные.

Полное описание объекта можно найти на сайтах docs.microsoft.com,   w3schools.com.

Для создания внутри сценария экземпляра объекта ADO Stream можно воспользоваться методом CreateObject объекта WScript:

var objStream = WScript.CreateObject("ADODB.Stream")

Также можно использовать объект ActiveXObject языка JScript (с помощью этого объекта можно работать с файловой системой из сценариев, находящихся внутри HTML-страниц):

var objStream = new ActiveXObject("ADODB.Stream")

Свойства объекта ADO Stream

CharSetУстанавливает или возвращает значение, указывающее, в какой набор символов должно быть переведено содержимое. Это свойство используется только с текстовыми объектами Stream.
EOSВозвращает, находится ли текущая позиция в конце потока или нет.
LineSeparatorЗадает или возвращает символ разделителя строк, используемый в текстовом объекте Stream.
PositionУстанавливает или возвращает текущую позицию (в байтах) от начала объекта Stream.
SizeВозвращает размер открытого объекта Stream.
TypeЗадает или возвращает тип данных в объекте Stream.

Методы объекта ADO Stream

CloseЗакрывает объект Stream.
CopyToКопирует указанное количество символов / байтов из одного объекта Stream в другой объект Stream.
LoadFromFileЗагружает содержимое файла в объект Stream.
OpenОткрывает объект Stream.
ReadСчитывает весь поток или указанное количество байтов из двоичного объекта Stream.
ReadTextСчитывает весь поток, строку или указанное количество символов из текстового объекта Stream.
SaveToFileСохраняет двоичное содержимое объекта Stream в файл.
SetEOSУстанавливает текущую позицию как конец потока (EOS).
SkipLineПропускает строку при чтении текстового потока.
WriteЗаписывает двоичные данные в объект двоичного потока.
WriteTextЗаписывает символьные данные в текстовый объект Stream.

CharSet

Свойство CharSet устанавливает или возвращает значение, указывающее, в какой набор символов должно быть преобразовано содержимое Stream (при сохранении в буфере объекта Stream). По умолчанию - «Unicode».

Синтаксис

// Свойство. Чтение и запись.

objStream.Charset [ = charset ]

charset - набор символов, в который будет переведено содержимое Stream. Значение по умолчанию - Unicode. Список имен наборов символов, известных системе находится в реестре Windows (HKEY_CLASSES_ROOT\MIME\Database\Charset).

Примечания

Для открытого потока текущая позиция должна быть в начале потока (0), чтобы можно было установить кодировку.

Это свойство используется только с текстовыми объектами Stream.

EOS

Свойство EOS возвращает логическое значение, которое указывает, находится ли текущая позиция в конце потока. true указывает, что текущая позиция находится в конце потока.

Синтаксис

// Свойство. Только чтение.

objStream.EOS

Примечания

чтобы установить текущую позицию в конец потока, используйте метод SetEOS.

чтобы определить текущую страницу потока, используйте свойство Position.

LineSeparator

Свойство LineSeparator устанавливает или возвращает значение LineSeparatorsEnum, которое указывает символ разделителя строк, используемом в текстовом объекте Stream. По умолчанию - adCRLF.

Синтаксис

// Свойство. Чтение и запись

objStream.LineSeparator [ = LineSeparatorsEnum]
LineSeparatorsEnum:
adCRLF -1 По умолчанию. Перевод строки возврата каретки
adLF 10 Только перевод строки
adCR 13 Только возврат каретки

Position

Свойство Position устанавливает или возвращает значение num, которое указывает текущую позицию (в байтах) от начала объекта Stream.

Синтаксис

// Свойство. Чтение и запись

objStream.Position [ = num]

num - позиция (в байтах) от начала объекта Stream.

Size

Свойство Size возвращает длинное значение, которое указывает размер (в байтах) объекта Stream.

Синтаксис

// Свойство. Чтение

objStream.Size

Примечания

Это свойство можно использовать только для открытого объекта Stream.

Это свойство возвращает -1, если размер потока неизвестен.

Type

Свойство Type устанавливает или возвращает значение StreamTypeEnum, которое указывает тип данных в объекте Stream. По умолчанию - adTypeText.

Синтаксис

// Свойство. Чтение и запись

objStream.Type [ = StreamTypeEnum ]
StreamTypeEnum:
adTypeBinary 1 Двоичные данные
adTypeText 2 По умолчанию. Текстовые данные

Close()

Метод Close() используется для закрытия объекта Stream и освобождения системных ресурсов.

Синтаксис

objStream.Close()

Когда объект закрыт, он не удаляется из памяти. Можно изменить настройки свойства и открыть его снова позже.

CopyTo()

Метод CopyTo() используется для копирования указанного количества символов или байтов из открытого объекта Stream в другой открытый объект Stream.

Синтаксис

objStream.CopyTo ( dest, numchars )

Параметры

dest
Обязательный. Куда копировать Stream (содержит ссылку на открытый объект Stream).
numchars
Необязательно. Целое число, указывающее количество символов или байтов, которые должны быть скопированы из текущей позиции в исходном потоке в целевой поток. По умолчанию -1 (копирует все данные из текущей позиции в EOS).

Примечания

Если указанное число больше доступного количества байтов/символов до EOS, то копируются только байты/символы из текущей позиции в EOS.

LoadFromFile()

Метод LoadFromFile() используется для загрузки содержимого существующего файла в открытый объект Stream. Все существующие данные в объекте Stream будут перезаписаны.

Синтаксис

objStream.LoadFromFile ( file )

Параметры

file
Имя существующего файла для загрузки в объект Stream.

Примечание

После вызова этого метода текущая позиция устанавливается на начало потока (Position = 0).

Open()

Метод Open() используется для открытия объекта Stream.

Синтаксис

objStream.Open ()

Параметры

Параметры для сокращенного варианта справочника не являются обязательными.

Read()

Метод Read() используется для чтения всего потока или указанного количества байтов из двоичного объекта Stream и возвращает полученные данные (val) в качестве варианта.

Этот метод используется только с двоичными объектами Stream, для текстовых объектов Stream используйте метод ReadText().

Синтаксис

val = objStream.Read ( numbytes )

Параметры

numbytes
Необязательно. Число байтов для чтения из файла или значение. По умолчанию. Читает все байты из потока от текущей позиции до EOS.
Если вы указали больше, чем количество байтов, оставшихся в потоке, возвращаются только оставшиеся байты.

ReadText()

Метод ReadText() используется для чтения всего потока, строки или указанного количества символов из текстового объекта Stream и возвращает полученные данные в виде строки.

Этот метод используется только с текстовыми объектами Stream, для двоичных объектов Stream используйте метод Read().

Синтаксис

str = objStream.ReadText ( numbytes | StreamReadEnum)

Параметры

numbytes
Необязательно. Количество символов для чтения из файла или значение StreamReadEnum. По умолчанию adReadAll.
Если вы указали больше, чем количество байтов, оставшихся в потоке, возвращаются только оставшиеся байты. StreamReadEnum:
adReadAll -1 По умолчанию. Читает все символы из потока, от текущей позиции до EOS
adReadLine -2 Читает следующую строку из потока

SaveToFile()

Метод SaveToFile() используется для сохранения двоичного содержимого открытого объекта Stream в локальный файл.

После вызова этого метода текущая позиция в потоке устанавливается на начало потока (Position = 0).

Синтаксис

objStream.SaveToFile ( file, opt )

Параметры

file
Обязательно. Имя файла для сохранения содержимого объекта Stream.
opt
Значение opt, указывающее, следует ли создавать файл, если он не существует (1), или перезаписывать его (2).

SetEOS()

Метод SetEOS() используется для установки текущей позиции как конца потока (EOS). Этот метод также обновляет свойство EOS.

Любые данные, выходящие за рамки нового EOS, будут усечены и потеряны.

Синтаксис

objStream.SetEOS ()

SkipLine()

Метод SkipLine() используется для пропуска строки при чтении текстового потока. Все символы, включая разделитель строк, пропускаются.

Этот метод используется только с текстовыми объектами Stream.

Синтаксис

objStream.SkipLine  ( )

Write()

Метод Write() используется для записи двоичных данных в двоичный объект Stream.

Синтаксис

objStream.Write ( buffer )

Параметры

buffer
Массив байтов для записи в двоичный объект Stream

Комментарии

Если в объекте Stream есть данные, а текущая позиция - EOS, новые данные будут добавлены помимо существующих данных. Если текущая позиция не EOS, существующие данные будут перезаписаны.

Если вы напишете предыдущую версию EOS, размер потока увеличится. EOS будет установлен на последний байт в потоке. Если вы не записываете предыдущий EOS, текущая позиция будет установлена на следующий байт после вновь добавленных данных. Ранее существующие данные не будут усечены. Вызовите метод SetEOS для усечения.

Примечание

Этот метод используется только с двоичными объектами Stream, для объектов textStream используйте метод WriteText.

WriteText()

Метод WriteText() используется для записи текста в текстовый объект Stream.

Синтаксис

objStream.WriteText( data, opt )

Параметры

data
Обязательно. Текст, который будет записан в текстовый объект Stream.
opt
Необязательно. Значение, указывающее, нужно ли добавлять к тексту разделитель строк:
0 - По умолчанию. Записывает указанный текст в объект Stream
1 - Записывает указанный текст и разделитель строк в объект Stream.
      Если свойство LineSeparator не определено, возникнет ошибка времени выполнения.

Комментарии

Если в объекте Stream есть данные, а текущая позиция - EOS, новые данные будут добавлены помимо существующих данных. Если текущая позиция не EOS, существующие данные будут перезаписаны.

Если вы напишете предыдущую версию EOS, размер потока увеличится. EOS будет установлен на последний символ в потоке. Если вы не пишете после EOS, текущая позиция будет установлена ​​на следующий символ после вновь добавленных данных. Ранее существующие данные не будут усечены. Вызовите метод SetEOS для усечения.

Примечание

Этот метод используется только с текстовыми объектами Stream, для двоичных объектов Stream используйте метод Write.

Пример.

Смена кодировки файла

var str= new ActiveXObject("ADODB.Stream"); 
str.Type = 2;
str.Charset = "windows-1251";
str.Open();
str.LoadFromFile("C:\\ANSI.txt");
Text = str.ReadText();
str.Close();
str.Charset = "UTF-8";
str.Open();
str.WriteText(Text);
str.SaveToFile ("C:\\UTF-8.txt", 2);
str.Close();

Для смены кодировки файлов файла можно воспользоваться моей программой uconv. Эта программа была написана для моих HTA-скриптов и предназначена для перекодировки данных из одной кодировки в другую. С описанием прораммы можно ознакомиться здесь

Вышеуказанный скрипт можно заменить командой:
uconv.exe   -ansi  C:\ANSI.txt   -utf8  C:\UTF-8.txt