[Pharo-users] Lost in stream

Sven Van Caekenberghe sven at stfx.eu
Fri Jun 22 08:24:21 EDT 2018

Hi Monty,

> On 18 Jun 2018, at 23:43, monty <monty2 at programmer.net> wrote:
> They still use (binary) StandardFileStreams on Pharo and Squeak. But since it's done through dynamically chosen file stream factory classes (XMLFileReadStreamFactory and XMLFileWriteStreamFactory), it's easy add support for other stream classes. (The GemStone compat .mcz adds factories for GsFile read/write factories, for example).
> #preferredImplementation selects which implementation to use in the hierarchy when there's more than one supported (#isSupportedImplementation).
> ___
> montyos.wordpress.com
>> Sent: Monday, June 18, 2018 at 1:34 AM
>> From: "Sven Van Caekenberghe" <sven at stfx.eu>
>> To: "Any question about pharo is welcome" <pharo-users at lists.pharo.org>
>> Subject: Re: [Pharo-users] Lost in stream
>>> On 18 Jun 2018, at 02:18, monty <monty2 at programmer.net> wrote:
>>> Also consider using XMLParser's built-in file reading support: #parseFileNamed:/#onFileNamed:. They work cross platform (Squeak, GS), and handle character decoding.
>> Monty, do these (already) work with all the latest changes in Pharo 7, I mean the deprecation of FileStream and subclasses as well as [RW|MultiByte]BinaryOrTextStream for FileReference, File and Zn streams ?
>> If not, we should help you.
>> Sven

Here is an attempt at an implementation (untested):


XMLStandardFileStream[Read|Write]StreamFactory class>>isSupportedImplementation
	^ (XMLClassFinder hasClassNamed: #StandardFileStream)
		and: [ (XMLClassFinder classNamed: #StandardFileStream) isDeprecated not ]


subclasses XMLPharoFile[Read|Write]StreamFactory

XMLPharoFile[Read|Write]StreamFactory class>>#isSupportedImplementation
	^ (XMLClassFinder hasClassNamed: #File)
		and: [ (XMLClassFinder classNamed: #FileStream) isDeprecated ]

XMLPharoFileReadStreamFactory class>>basicOnPath: aPathString
	^ aPathString asFileReference binaryReadStream

XMLPharoFileWriteStreamFactory class>>basicOnPath: aPathString
	^ aPathString asFileName ensureDelete binaryWriteStream

File and FileStream have existed in Pharo for quite a while, it is only after FileStream and subclasses where deprecated that we can speak of a real switch.

You also have XMLFileSystemFileHandle that could be used directly, I guess. But you pass on paths as strings, so if you want to keep that, the above should work AFAIKT.



More information about the Pharo-users mailing list