Windows/win32all, unicode and long filenames

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Kevin Ollivier

    #1

    Windows/win32all, unicode and long filenames

    Hi all,

    On Windows, it's very common to have a string of long directories in the
    pathname for files, like "C:\Documen ts and Settings\My Long User Name\My
    Documents\My Long Subdirectory Name\...". For a wxPython application I'm
    working on, this has actually caused me to run into what appears to be
    Python's pathname length limit for opening files. (247 chars on Win) Yes,
    I can hear people saying "yipes!" but this stuff does happen sometimes on
    Windows. :-)

    My first inclination was to use win32api.GetSho rtPathName(mypa th), which
    worked fine until I had an unicode pathname with non-ascii characters in
    it. Those give me the 'oridnal not in
    range' errors performing an ascii encode, meaning that GetShortPathNam e
    doesn't handle unicode objects. The problem is that I'm working with
    Unicode filenames that contain characters that are not only non-ascii
    characters, but characters not in the current locale's character set as
    well. So I can't just 'down convert' from a unicode object to a string
    object in the current character set without corrupting the filename.
    Looking at the pyWin32 sources, it does look like only the ASCII version
    of this function exists, which suggests that for now this route is a
    dead-end.

    The only other solution I could think of is to call
    os.chdir(long_p athname) and open the file using a filename relative to
    long_pathname instead of an absolute path. But I was wondering if there
    was another solution, preferably one that doesn't require me to muck with
    the current directory, and I was also wondering if there was a simple way
    to get one or both of the above limitations removed. :-)

    Thanks in advance for any help,

    Kevin
  • Neil Hodgson

    #2
    Re: Windows/win32all, unicode and long filenames

    Kevin Ollivier:
    [color=blue]
    > On Windows, it's very common to have a string of long directories in the
    > pathname for files, like "C:\Documen ts and Settings\My Long User Name\My
    > Documents\My Long Subdirectory Name\...". For a wxPython application I'm
    > working on, this has actually caused me to run into what appears to be
    > Python's pathname length limit for opening files. (247 chars on Win) Yes,
    > I can hear people saying "yipes!" but this stuff does happen sometimes on
    > Windows. :-)[/color]

    The Win32 API restricts path arguments to 260 characters. Longer
    paths can be passed to wide character functions by using a "\\?" prefix.
    http://msdn.microsoft.com/library/de...ing_a_file.asp
    This may work from Python although I haven't tested it.
    [color=blue]
    > My first inclination was to use win32api.GetSho rtPathName(mypa th),
    > ...
    > Looking at the pyWin32 sources, it does look like only the ASCII version
    > of this function exists, which suggests that for now this route is a
    > dead-end.[/color]

    All APIs can be accessed through ctypes.

    Neil

    Comment

    • Kevin Ollivier

      #3
      Re: Windows/win32all, unicode and long filenames

      On Sat, 27 Aug 2005 23:30:46 +0000, Neil Hodgson wrote:
      [color=blue]
      > Kevin Ollivier:
      >[color=green]
      >> On Windows, it's very common to have a string of long directories in the
      >> pathname for files, like "C:\Documen ts and Settings\My Long User Name\My
      >> Documents\My Long Subdirectory Name\...". For a wxPython application I'm
      >> working on, this has actually caused me to run into what appears to be
      >> Python's pathname length limit for opening files. (247 chars on Win) Yes,
      >> I can hear people saying "yipes!" but this stuff does happen sometimes on
      >> Windows. :-)[/color]
      >
      > The Win32 API restricts path arguments to 260 characters. Longer
      > paths can be passed to wide character functions by using a "\\?" prefix.
      > http://msdn.microsoft.com/library/de...ing_a_file.asp
      > This may work from Python although I haven't tested it.
      >[color=green]
      >> My first inclination was to use win32api.GetSho rtPathName(mypa th),
      >> ...
      >> Looking at the pyWin32 sources, it does look like only the ASCII version
      >> of this function exists, which suggests that for now this route is a
      >> dead-end.[/color]
      >
      > All APIs can be accessed through ctypes.[/color]

      Thanks for the tips! I had heard of ctypes but it never crossed my mind it
      was for accessing functions from shared libraries. :-) I'll try both of
      your tips out, and one of them should resolve the problem.

      Kevin
      [color=blue]
      > Neil[/color]

      Comment

      • Do Re Mi chel La Si Do

        #4
        Re: Windows/win32all, unicode and long filenames

        Hi !


        You are true.
        But, more, don't believe : for use with CD-Rom/DVD, a path cannot to have
        more than 64 caracteres.


        @-salutations

        Michel Claveau


        Comment

        Working...