On Mon, 07 Mar 2011 10:25:21 +0000, Regan Heath wrote: > On Sun, 06 Mar 2011 08:37:15 -0000, Rainer Schuetze <r.sagita...@gmx.de> > wrote: > >> Looks good overall. I have a few comments and nitpicks though: >> >> > basename("dir/subdir/") --> "subdir" >> > directory("dir/subdir/") --> "dir" >> >> Is this what everybody expects? I'm not sure, but another possibility >> would be to treat these as if "dir/subdir/." is passed. What is the >> result of directory("/") or directory("d:/")? > > ?? I would expect: > > directory("dir/subdir/") --> "dir/subdir" > > as subdir _is_ a dir, not a file, as shown by the trailing slash. If it > was: > > directory("dir/subdir") --> "dir" > > as subdir is perhaps not a directory, as there is no trailing slash. > > I realise this means the trailing slash becomes important, but it kinda > is important as it does tell us when something is definitely a > directory.
I don't think it does, or rather, I don't think there is such a thing as "definitely a directory". What about a symlink to a directory, for instance? On one hand, it *is* a file that contains a reference to a directory, and on the other, in most respects it *acts like* a directory. You can even argue that a "file" is simply the term used for a node in the filesystem tree, and that "directory" is a special kind of file that contains a list of other files. This terminology is pretty standard in *NIX land, at least. (Just google "everything is a file".) > Alternately, we could ignore the distinction between file and directory > - as we're essentially just parsing strings here - and have two > functions: > > lastComponent("dir/subdir/") -> "subdir" lastComponent("dir/subdir") > -> "subdir" > > allButLastComponent("dir/subdir/") -> "dir/" > allButLastComponent("dir/subdir") -> "dir/" That's how it's done now, and how I think it should be. The two paths "dir/subdir" and "dir/subdir/" both refer to the same object in the file system, namely "subdir". baseName gives you the name of the object referred to by a path, while dirName gives you the directory containing said object. Whether that object is a file or a directory is irrelevant. (And if you need to know what it is, there is always std.file.isDir and isFile.) -Lars