Hi I would like to get your thoughts on the following: Following the blog of ramon and his code in sandstoneDB which extends dataStream as follows: Here is a typical example: fileNamed: aName do: aBlock | file | file := self fileNamed: aName. ^ file ifNil: [ nil ] ifNotNil: [ [ aBlock value: file ] ensure: [ file close ] ] fileNamed: aString "Here is the way to use DataStream and ReferenceStream: rr := ReferenceStream fileNamed: 'test.obj'. rr nextPut: <your object>. rr close. better use: fileNamed:do: " | strm | strm := self on: (FileStream fileNamed: aString). "will be binary" strm byteStream setFileTypeToObject. "Type and Creator not to be text, so can attach correctly to an email msg" ^ strm There is similar pattern in FileStream detectFile: aBlock do: anotherBlock | file | file := aBlock value. ^ file ifNil: [ nil ] ifNotNil: [ [anotherBlock value: file] ensure: [file close]] fileNamed: fileName ^ self concreteStream fileNamed: (self fullName: fileName) fileNamed: fileName do: aBlock "Avi Bryant says, ''This idiom is quite common in other languages that make heavy use of closures (i.e. Lisp (with-file 'foo' (f) ...) and Ruby (File.open('foo'){| f|...})). It's time Squeak had it, too.'' Returns the result of aBlock." ^ self detectFile: [ self fileNamed: fileName ] do: aBlock I have a question: - would not be better to even wrap the on: into the first block of the ensure: message? - do we have to close a file even if its creation failed? Stef