System.FilePath propsal (Was: Cabal feedback notes)

Graham Klyne gk at ninebynine.org
Thu Oct 28 10:11:39 EDT 2004


At 06:52 28/10/04 -0700, Krasimir Angelov wrote:
>--- Graham Klyne <gk at ninebynine.org> wrote:
> > > > 2. How does path joining work in this case:
> > > >
> > > >     joinPaths C:/root/path/file.ext
> > > > altPath/file2.ext2
> > > >
> > > > i.e. is "file.ext" discarded?
> > >
> > >No. You will get:
> > >
> > >C:/root/path/file.ext/altPath/file2.ext2
> >
> > Hmmm.  I can't claim it's wrong, but I'm uneasy
> > about that.  It is, for
> > example, different from the way that URI path
> > joining works.
>
>What do you expect to get? file.ext is a valid
>directory name.

Indeed it is.  This is, I believe, an ambiguity with the way 
Unix-like-systems present directory and file names, which cannot be 
disambiguated without actually consulting the live file system.  Windows 
has a similar issue.  The URI path-joining algorithm would drop the final 
"filename" element 'file.ext' (not being terminated by '/'), and give:

   C:/root/path/altPath/file2.ext2

>By the way
>
>joinPaths "c:/dir1/file.ext" "c:/dir2" == "c:/dir2"
>
>because the second path is absolute.

Good.  That's as I'd expect.

> > What about:
> >
> >    joinPaths C:/root/path/ altPath/file2.ext2
> >
> > does this give:
> >    C:/root/path/altPath/file2.ext2
> > or
> >    C:/root/path//altPath/file2.ext2
> >
> > ?
>
>The first one. "//" is equal to "/", isn't it?

Is it?  Is it definitely prohibited to have a zero length path 
segment.  What is the correct interpretation of this:

   C:/root/path//../altPath/file2.ext2

?

(I'm not saying you're wrong, just that the answer isn't entirely clear-cut.)

...

BTW, whatever the final answer, I think it would be a great idea to have a 
unit test module (preferably using HUnit) with all these as test cases.  If 
only to definitively settle questions from awkard people like me.

#g


------------
Graham Klyne
For email:
http://www.ninebynine.org/#Contact



More information about the Libraries mailing list