Richard Suchenwirth 2006-04-05 - A VFS (virtual filesystem) is an elaborate piece of engineering. This page is not. It's just an experiment in how to map tree-structured data in a kind of filesystem with directories. (The purpose is to provide an analogon to glob, for opening Tree nodes for such a structure on demand.) For this, each "directory" is implemented as an array element, which contains its children with full path.
proc mkvfs {_arr data} { upvar 1 $_arr arr foreach item $data { set dir [file dir $item] if ![info exists arr($dir)] {set arr($dir) {}} if {$dir ne "/"} {mkvfs arr $dir} if {[lsearch -exact $arr($dir) $item]<0} { lappend arr($dir) $item } } }
Test:
set data { /foo/f1/g1 /foo/f1/g2 /foo/f2/g3 /foo/f2/g4 /bar/b1/hello /bar/b1/world /bar/b2/test /bar/b2/again } % mkvfs arr $data % parray arr arr(/) = /foo /bar arr(/bar) = /bar/b1 /bar/b2 arr(/bar/b1) = /bar/b1/hello /bar/b1/world arr(/bar/b2) = /bar/b2/test /bar/b2/again arr(/foo) = /foo/f1 /foo/f2 arr(/foo/f1) = /foo/f1/g1 /foo/f1/g2 arr(/foo/f2) = /foo/f2/g3 /foo/f2/g4
SEH 20060405 -- The Tclvfs package has a sample namespace virtual filesystem which uses namespaces to manage the tree-structured file/directory data. It may provide the kind of function you're looking for.
LV I suspect that Richard is not seeking a function, but instead experimenting with how aspects of various advanced features of Tcl could be emulated, in part, in vanilla Tcl.
RJ He's Playing VFS, IMO.