For file streams the line will terminate on any of the characters set in the LineTerminator, it does not support
multi-character line terminators because it uses the ObjectScript file behavior which terminates on any of the characters.
Also for %FileCharacterStream even if you set this when you call WriteLine() as the file was opened in 'S'
mode it will normalize the line terminator as the data is being written, so for example if you set LineTerminator to
$char(13,10) on Unix systems when you call WriteLine() it will only write $char(10) to the file.
property NormalizedDirectory as %String (MAXLEN = 5000) [ Private ];
Normalized form of the directory. This is used for access to the file (as it adds the
extra '/' if needed), but it stores the Directory in the Id as
this may be a relative path. This is read only, you should not try and set its value.
Inherited description: Checks to see if the object identified by the OID oid exists in the extent.
Returns %Boolean TRUE is it exists, FALSE if it does not.
method %LocationGet() as %String [ Language = objectscript ]
method %LocationSet(value As %String) as %Status [ Language = objectscript ]
method %NormalizeObject() as %Status [ Language = objectscript ]
Inherited description: Normalizes all of an object's property values by invoking the data type Normalize methods.
Many data types may allow many different representations of the same value.
Normalization converts a value to its cannonical, or normalized, form.
Inherited description: This callback method is invoked by the %ConstructClone() method to
provide notification that a clone of an object is being created. It passes in the
oref of the object that was cloned in object.
If this method returns an error then the object will not be created.
private method %OnNew(initval As %String = "") as %Status [ Language = objectscript ]
Inherited description: This callback method is invoked by the %New() method to
provide notification that a new instance of an object is being created.
If this method returns an error then the object will not be created.
It is passed the arguments provided in the %New call.
When customizing this method, override the arguments with whatever variables and types you expect to receive from %New().
For example, if you're going to call %New, passing 2 arguments, %OnNew's signature could be:
Method %OnNew(dob as %Date = "", name as %Name = "") as %Status
If instead of returning a %Status code this returns an oref and this oref is a subclass of the current
class then this oref will be the one returned to the caller of %New method.
private method %SaveData(ByRef sid As %String) as %Status [ Language = objectscript ]
Inherited description: This method validates an object. The %Save method of a persistent class calls it before filing any objects in the database.
The %ValidateObject method of a referencing object can call it. You can also call it explicitly at any time.
It tests if any required property values are missing.
If the PROPERTYVALIDATION class parameter is set to ValidateOnSave,
it validates each non-null property value by calling the property method IsValid on each literal property and the object's %ValidateObject method for object-valued properties.
If any of these tests fail, %ValidateObject() immediately returns an error value. It is up to the caller
of %ValidateObject to process the error value.
unused is not used. checkserial will force the checking of any serial properties by calling their %ValidateObject methods after swizzling
this property.
Returns a %Status value indicating success or failure.
method CanonicalFilenameGet() as %String [ Language = objectscript ]
method Clear(permanent As %Boolean = 1) as %Status [ Language = objectscript ]
Inherited description: Clear the contents of this Stream from permanent storage. This will remove the permanent stream storage and
any temporary stream and initialise the stream to its initial state that it starts in, including removing all
the stream attributes.
Returns a %Status value indicating success or failure.
Inherited description: Copies the contents of source into this Stream.
For example, you can copy oldstream into a new stream:
Set newstream=##class(%GlobalCharacterStream).%New()
Do newstream.CopyFrom(oldstream)
Returns a %Status value indicating success or failure.
private method DirectorySet(dir As %String) as %Status [ Language = objectscript ]
method FileBinarySize() as %Integer [ Language = objectscript ]
Return the current size of the file in bytes.
method FilenameGet() as %String [ Language = objectscript ]
method FilenameSet(file As %String) as Status [ Language = objectscript ]
method Flush() as %Status [ Language = objectscript ]
Inherited description: Flush any output in the stream not already saved.
private method GetReadOpenParameter(filename As %String, mode As %Integer, ByRef pos As %Integer) as %String [ Language = objectscript ]
classmethod GetStreamIdForFile(file As %String, contenttype As %String = "", charset As %String = "") as %String [ Language = objectscript ]
Generate a stream OId that links to this file. This can be used by the CSP
server to generate an OID that can be embedded in a web page and later
used to display this file. The contenttype is an optional parameter to
specify the content type of this stream for display with a stream server.
If I have a file called 'C:\Test.txt' then I can create a stream linked to this by:
Set id=##class(%FileCharacterStream).GetStreamIdForFile("c:\Test.txt")
Set stream=##class(%FileCharacterStream).%Open(id)
Do stream.OutputToDevice()
private method GetWriteOpenParameter(filename As %String, mode As %Integer) as %String [ Language = objectscript ]
private classmethod IODeleteStream(sid As %String, concurrency As %Integer = 0) as %Status [ Language = objectscript ]
Inherited description: Delete the storage for the stream identified by sid.
private method IOGetStreamId() as %String [ Language = objectscript ]
Inherited description: Return the id for a stream; that is, an identifier that can later be used
to open the same stream.
private method IOInit() [ Language = objectscript ]
Inherited description: Initialize member variable used by the StreamAdaptor. This
This is called when the containing stream is opened via %SetSerial.
method LastModifiedGet() as %TimeStamp [ Language = objectscript ]
method LineTerminatorSet(terminator As %String) as %Status [ Language = objectscript ]
method LinkToFile(filename As %String) as %Status [ Language = objectscript ]
This method lets you connect a file stream to a file called filename without
making a copy of it. If the file does not already exist it will still allow you to link
to this file, and %IsNull() will return true until you write to this file.
Do object.Image.LinkToFile("\temp\image.jpg")
Do object.%Save()
The method as its name suggests creates a LINK to an EXISTING
file. So this is a 'shared public' file, as it can be shared by
several instances of a class, or even several classes.
Using the CopyFrom() method, on the contrary, creates a
'private' image, not sharable by other instances/classes, so
these two methods are really different.
The problems with shared public images are that several instances
are all allowed to update and even delete the image, causing
problems for other instances.
For example, if dog #2 has image 'test.gif', I can also
assign that image to dog #5 or even person #24
If I change the image for dog #5, then the image is changed in
place to another image, thus upsetting dog#2 and person#24.
If I delete dog#5, the image is also deleted and thus dog#2
and person#24 are changed.
Also note that if there is currently some temporary data in the old stream when the
LinkToFile() is called this temporary data will be removed before the
stream is linked to this filename.
method MoveToEnd() as %Status [ Language = objectscript ]
Inherited description: Move to the end of the stream so the next Write will be appended to the end.
This allows you to read from a stream, then MoveToEnd() and append new data, where just calling
Write() after a read will clear the stream before writing new data.
Returns a %Status value indicating success or failure.
classmethod NewFileName(ext As %String = "", directory As %String = "") as %String [ Language = objectscript ]
method OpenStream(sid As %String) as %Status [ Language = objectscript ]
Open a stream given a stream id
method OutputToDevice(ByRef len As %Integer = -1) as %Status [ Language = objectscript ]
Inherited description: Write out len characters of the stream to the current device starting from the current position. This
method is optimised for performance by the various sub classes. If len is omitted or set to -1 then
it will write out the entire stream starting at the beginning.
method Read(ByRef len As %Integer = 32000, ByRef sc As %Status) as %RawString [ Language = objectscript ]
Inherited description: Reads up to len characters from the current position
in the stream. The current position is advanced by the number of
characters read. Upon exit, len is set to the actual
number of characters read. If a read occurs when the stream position
is at the end of the stream, len will be set to -1 and
Read() will return a null string (""). If no len
is passed in, ie. 'Read()()' then it is up to the Read implementation as to
how much data to return. Some stream classes use this to optimize the amount of
data returned to align this with the underlying storage of the stream.
You must call Rewind() if you want to read a stream from the beginning
again. Calling Read() after Write() implicitly ends the Write()
operation and rewinds to the start of the stream.
Returns a string up to len characters long. The byref argument sc will
return a %Status if any error occurred during the read.
Read a line from the file. Note that besides the normal ReadLine arguments this can also be passed a term which
will return the termintor that completed the line if we read in a whole line.
method ReadLineIntoStream(ByRef sc As %Status) as %AbstractStream [ Language = objectscript ]
Inherited description: This reads from the stream until it find the LineTerminator and returns
this as a stream. If the stream does not contain the line terminator this can potentially be the
entire stream.
method Rewind() as %Status [ Language = objectscript ]
Inherited description: Go back to the start of the stream.
method SaveStream() as %Status [ Language = objectscript ]
Inherited description: Deprecated method, use %Save() instead.
Saves the temporary copy of the stream data to a persistent location. Note that
any locking or transaction handling must be done by the caller.
Returns a %Status value indicating success or failure.
private method SetupRead(newMode As %Integer) as %Status [ Language = objectscript ]
method SizeGet() as %Integer [ Language = objectscript ]
Return the current size of the data stream.
method Write(data As %RawString = "") as %Status [ Language = objectscript ]
Inherited description: Appends the string data to the stream and advances the
current stream position by the number of characters in data.
Note that a write operation immediately following a read or rewind
will clear out the existing data in the stream.
Returns a %Status value indicating success or failure.