Path as an object in std.path
Michel Fortin
michel.fortin at michelf.ca
Thu Jun 6 09:23:43 PDT 2013
On 2013-06-06 15:36:15 +0000, Walter Bright <newshound2 at digitalmars.com> said:
> 8. There really isn't any such thing as a portable path representation.
> It's more than just \ vs /. There are the drive prefixes in Windows
> that have no analog in Linux. Sometimes case matters in Linux, where it
> would be ignored under Windows. There are 8.3 issues sometimes. The
> only thing you can do is come up with a subset of what works across
> systems, and then of course you have to go back to using strings when
> you need to access D:\foo\abc.c
Actually, there is one portable representation for paths: URLs. More
specifically "file:" URLs if we're limiting ourselves to filesystem
paths. Relative URLs should probably count too.
But otherwise, that's all true. To correctly normalize a path, you need
to know which underlying filesystem is in use. Today's operating
systems can mix and match case-sensitive, case-preserving, and
case-insensitive filesystems, different restrictions on file names, and
sometime have obscure restrictions/normalization when using old APIs on
newer filesystenm. You can't really normalize a path without making a
lot of assumptions.
Of course, that's not an argument for or against having a path object
to encapsulate the differences. But I'd tend to say that what the path
object can do is more limited than one might think at first glance.
As a side note, Apple is currently asking application developers to use
URLs instead of raw paths to local files. Using URLs makes it possible
for instance to attach "bookmarks" keys on path (in the query string)
that can more or less automatically punch a hole in the sandbox when
accessing a file (which can expire or be revoked). Pretty much all
recent Cocoa APIs take url objects instead of path strings.
--
Michel Fortin
michel.fortin at michelf.ca
http://michelf.ca/
More information about the Digitalmars-d
mailing list