Storages & Files Storages and Files

Storages and Files

In short the Storages and Files part of the ActiveX pack1 includes 3 groups of objects:

  • Basic text and binary access to streams and storages - files, directories, OLE files etc.
  • Record based DB-like access to streams (also often called flat files or random access files).
  • Miscellaneous objects - helper objects to compensate lack of some important features in certain scripting languages.

The basic part is used in the similar way as the popular FSO (FileSystemObject) supplied with the Microsoft script engines as run-time library. There is a "root" object - SFMain. The application creates that object and is able to obtain any other objects needed from it - for example SFStream for a file. The abstract model based on streams and storages allows the application to work with all the resources the same way. There is no matter if the stream is file or in-memory stream or stream in an OLE file or external stream - the application can read/write text, navigate read/write binary segments calling the same members in the same order with the same data. Once opened the resource becomes wrapped by the same object.

The record based access gives the application two advantages - to work with streams containing series of records. Such files are well known for the C++ and Pascal/Delphi programmers. They can be used for custom data base implementation, creation of applications dependent only on core features (i.e. no dependency on pre-installed components, DB engines - sometimes desired for autorun applications). With the objects in this pack this is possible not only over files but also over any stream-like resource as long as there is a component to provide the standard access to it through IStream interface.

The record based access uses a filter positioned between the record (SFrecord object) and the stream. There is default filter in the library but custom can be built. The filter is responsible to perform all the required conversions - for example ANSI to UNICODE (or reverse), byte ordering etc. The filter can be used also directly (without record) if the application needs to read/write values in non-record organized files (for example headers of many popular file formats).

The miscellaneous objects are represented by the SFShellLink and the TypeConvertor which gives the VBScript applications ability to perform bitwise operations and JScript applications ability to perform strict type casting. Cooperation between different kind of software sometimes requires the script based applications (such as ASP pages) to perform a small number of operations not very typical for scripts - bitwise operations or type conversion. Such capabilities extend the scripts application beyond the simple automation of certain processes and gives the developers rapid way to build useful tools for minutes.

See the overviews and concepts in the "General" section:

Note that all the objects use common open/create flags (called SF_Flags in the documentation)  that control the open mode (read/write), sharing and other specifics. Your work will be much more easier if you use the supplied ASP include files. The COM programmers will find that these constants are the same as in STGM enumeration (see MSDN). As the Storages and files basic features are based on standard COM interfaces there is a good level of compatibility with wide range of external components - can be used through the library objects, can benefit of the record based access over foreign implementations of stream like behavior etc.

List of the Storages and Files objects:

SFMain

Threading model: Both
Program ID: newObjects.utilctls.SFMain
ClassID: {F86AC6C2-5578-4AE8-808A-DC5DAA78082A}
Threading model: Free
ProgramID: newObjects.utilctls.SFMain.free
ClassID: {63B21C3D-6BA1-4565-9B34-E1C66E0449FD}

TypeConvertor

Threading model: Both
Program ID: newObjects.utilctls.TypeConvertor
ClassID: {2D9B783F-8DB3-4E5E-83F7-7367AB690346}
Threading model: Free
ProgramID: newObjects.utilctls.TypeConvertor.free
ClassID: {DBB52E7B-FCFC-4d85-9936-E7C4CF6B661A}

SFStream

Threading model: Both
Program ID: newObjects.utilctls.Stream
ClassID: {81D1E083-2C7F-4EFA-A45F-58A93B513A33}
Threading model: Free
ProgramID: newObjects.utilctls.Stream.free
ClassID: {F38BC51D-B506-4f89-AF62-7C6989EF1F9C}

SFStorage

Threading model: Both
Program ID: newObjects.utilctls.SFStorage
ClassID: {59B71984-3121-402E-A110-0B54BDC3EF32}
Threading model: Free
ProgramID: newObjects.utilctls.SFStorage.free
ClassID: {B05EB05E-0794-4976-83F4-9C0CC52E38DC}

SFRecord

Threading model: Both
Program ID: newObjects.utilctls.SFRecord
ClassID: {52CA1847-DDB9-49BB-96F4-099C6BC3B7E8}
Threading model: Free
ProgramID: newObjects.utilctls.SFRecord.free
ClassID: {02355E5B-2EE9-42d5-81F2-8CF7B7496F2B}

SFInfo

noncreatable (returned when file/directory/stream/storage information is requested)

SFFilter

Threading model: Both
Program ID: newObjects.utilctls.SFFilter
ClassID: {4A467FBB-711D-423A-947B-85FADC8B0913}
Threading model: Free
ProgramID: newObjects.utilctls.SFFilter.free
ClassID: {1380FA60-C871-481e-8D17-1C7B665BEC4C}

SFField

Threading model: Both
Program ID: newObjects.utilctls.SFField
ClassID: {5F88FA0B-BEC0-41B9-82A1-B67B4F187AE5}
Threading model: Free
ProgramID: newObjects.utilctls.SFField.free
ClassID: {F9A5F293-335F-421b-8C6D-97DDAE5A32E2}

SFDrive

Threading model: Both
Program ID: newObjects.utilctls.SFDrive
ClassID: {BE7887BA-10AA-47B5-BBEC-31617CCA5FB1}
Threading model: Free
ProgramID: newObjects.utilctls.SFDrive.free
ClassID: {6F280CFD-482F-46ea-B7BC-C43AF59E595C}

SFFileStream

Threading model: Both
Program ID: newObjects.binsrv.FileStream
ClassID: {1C89ABD6-F168-46A2-A562-A192DB1BC24D}
Threading model: Free
ProgramID: newObjects.binsrv.FileStream.free
ClassID: {4A4ADEA6-8124-405e-AA83-767E439FBCFC}

SFDirStorage

Threading model: Both
Program ID: newObjects.binsrv.DirStorage
ClassID: {8C5ED567-C721-4B29-8C06-3262AEDFE233}
Threading model: Free
ProgramID: newObjects.binsrv.DirStorage.free
ClassID: {0914783B-3C32-4a9f-BF7A-0D230575C30F}

SFShellLink

Threading model: Both
Program ID: newObjects.utilctls.ShellLink
ClassID: {70BD6BA6-C316-4CD5-9E95-A5BEA443ABAC}
Threading model: Free
ProgramID: newObjects.utilctls.ShellLink.free
ClassID: {48A58699-D5E5-4f7f-8F97-43378500D406}
Note:
In free threaded apartments ShellLink will not work with URL shortcuts.

SFBinaryData

Threading model: Both
Program ID: newObjects.utilctls.SFBinaryData
ClassID: {6FD08154-39CA-47AE-9299-6E37D7A894DB}
Threading model: Free
ProgramID: newObjects.utilctls.SFBinaryData.free
ClassID: {6A123D64-D17D-4ba3-9215-DEF0E037B87A}

 

newObjects