[Python-Dev] casefolding in pathlib (PEP 428)
solipsis at pitrou.net
Fri Apr 12 19:50:58 CEST 2013
On Fri, 12 Apr 2013 19:42:25 +0200
Ralf Schmitt <ralf at systemexit.de> wrote:
> Guido van Rossum <guido at python.org> writes:
> > Actually, I've heard of code that dynamically falls back on short
> > names when paths using long names exceed the system limit for path
> > length (either 256 or 1024 IIRC). But short names pretty much require
> > consulting the filesystem, so we can probably ignore them.
> The limit is 260 characters. But longer paths can be handled by
> prepending \\?\ and using the unicode APIs.
> see http://msdn.microsoft.com/en-us/library/aa365247.aspx#maxpath
Indeed. I thought I might use them by default in pathlib but there are
other pains: notably, extended paths (those starting with \\?\) can
only be absolute.
So pathlib supports *passing* them explicitly (kind of, there are very
few tests for them) but it doesn't constructs them implicitly.
(as Dirkjan pointed out, Mercurial also has domain-specific code to
handle Windows paths quirks; this is where I took the idea of having a
is_reserved() method for NUL, CON, etc.)
> we have the following code to handle the above insanity:
> | def prepend_magic_win32(path):
> | assert isinstance(path, unicode), "path must be of type unicode"
> | if path.startswith(u"\\\\"):
> | if path.startswith(u"\\\\?\\"):
> | return path
> | else:
> | return u"\\\\?\\UNC\\" + path[2:]
> | else:
> | return u"\\\\?\\" + path
More information about the Python-Dev