1 (изменено: Xameleon, 2010-03-22 02:36:01)

Тема: VBS: Аналог ADODB.Stream, который не грузит весь файл в память

Давно искал быструю "читалку" двоичных файлов, присутствующую в Windows по умолчанию. ADODB.Stream плох тем, что при работе с большими файлами, он целиком грузит их в память. Соответственно долго ждать + память забивается. Сейчас обнаружил COM объект, который не делает такой гадости - SAPI.spFileStream.

Более того, он не только читает, но и пишет двоичные файлы. О чём ещё мечтать )

Const SSFMOpenForRead = 0

Dim Stream
Set Stream = CreateObject("SAPI.spFileStream")
Stream.Open "C:\filename",SSFMOpenForRead
Stream.Read Buffer,1024
msgbox Buffer
Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

2

Re: VBS: Аналог ADODB.Stream, который не грузит весь файл в память

Описание объектной модели.

3

Re: VBS: Аналог ADODB.Stream, который не грузит весь файл в память

Нифигасе - интересно дефки пляшут !!! не слышал про такое...

Времени не хватает... :-(

4 (изменено: Xameleon, 2010-03-22 12:09:06)

Re: VBS: Аналог ADODB.Stream, который не грузит весь файл в память

Более того, класс SAPI.spMemoryStream из того же COM объекта, даёт возможность работать с двоичными данными в скриптах.

Очень удобен для "нарезки двоичных данных".

Dim Buffer,NumberOfBytes
Buffer = "ABCDEFGH"
Set stream = CreateObject("SAPI.spMemoryStream")
stream.SetData Buffer
NumberOfBytes = 10
Stream.Read Buffer,NumberOfBytes
msgbox TypeName(Buffer)

Описание методов класса
http://msdn.microsoft.com/en-us/library … S.85).aspx

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

5

Re: VBS: Аналог ADODB.Stream, который не грузит весь файл в память

Весьма интересно!

6 (изменено: Serge Yolkin, 2014-07-22 19:41:46)

Re: VBS: Аналог ADODB.Stream, который не грузит весь файл в память

Пример уважаемого Xameleon из #1 работает, но (...) как перевести на JS "Stream.Read Buffer,1024"?
Пробовал так:

a=stream.Read(1024);                             // недопустимое число аргументов
    ...
stream.Read(c,1024);
WScript.echo(typeof(c));                         // undefined
    ...
a=stream.Read(c,1024);
WScript.echo(a);                                 // 1024
WScript.echo(typeof(a));                         // number
WScript.echo(typeof(c));                         // undefined

Или это из-за типа данных variant?

7

Re: VBS: Аналог ADODB.Stream, который не грузит весь файл в память

Вероятно, там выходной параметр, т.е. передача переменной должна быть по ссылке, чего JScript не умеет.

8

Re: VBS: Аналог ADODB.Stream, который не грузит весь файл в память

Т.е., безнадёга?

9

Re: VBS: Аналог ADODB.Stream, который не грузит весь файл в память

Т.е., безнадёга?

Использовать кусок кода на VBScript посредством формата *.wsf, або объекта ScriptControl.