os.path.getmtime on windows, error: 206 - path or extension too long

mynthon mynthon1 at gmail.com
Wed Jan 21 09:11:03 EST 2009


On Jan 21, 2:58 pm, mynthon <mynth... at gmail.com> wrote:
> On Jan 21, 2:13 pm, mynthon <mynth... at gmail.com> wrote:
>
>
>
> > On Jan 21, 11:50 am, mynthon <mynth... at gmail.com> wrote:
>
> > > I have very long path on windows and i get error when try to get
> > > modification time. So i tried do chdir path and then get file. It now
> > > gives me error that file doesn't exists
>
> > > # code
> > > def getmtimeWIN32(p):
> > >     mycwd = os.getcwd()
>
> > >     if p.startswith('\\\\?\\'):
> > >         p = p.replace('\\\\?\\', '', 1)
>
> > >     p = os.path.splitdrive(p)
> > >     r = p[0] # root - dir name
> > >     p = p[1]
> > >     p = os.path.split(p)
> > >     f = p[1] # filename
> > >     d = p[0]
> > >     l = d.split('\\');
>
> > >     if r != '': # if root is not empty change to root (it not works
> > > when script is on other partition than file)
> > >         os.chdir('/')
>
> > >     for i in l:
> > >         if i != '':
> > >             os.chdir(i)
> > >             #print i
> > >     print os.getcwd()
> > >     os.path.getmtime(f)
> > >     os.chdir(mycwd)
> > > # /code
>
> > > it works for other files so i suppose it is not my fault. I know there
> > > is a win32 module but i can't find any documentation for it (what is
> > > the purpose to create app without docs?). Any idea?
>
> > > I searched google but there where only 2 options. Use chdir (not
> > > working) or use win32api (where is no documentation).
>
> > > (python 2.5)
>
> > ok, what ive found:
>
> > os.chdir('very_long_path')
> > # works
>
> > os.listdir('very_long_path')
> > # gives:
> > Traceback (most recent call last):
> >   File "<stdin>", line 1, in <module>
> > TypeError: listdir() argument 1 must be (buffer overflow), not str
>
> > os.chdir('very_long_path')
> > os.listdir('.')
> > #works
>
> > os.chdir('very_long_path')
> > os.path.getmtime(os.listdir('.')[0])
> > #throws exception (path not exists)
>
> > os.chdir('very_long_path')
> > open(os.listdir('.')[0])
> > #throws exception (path not exists)
>
> i dont have a solution but workaround.
> I can map long path as drive:
>
> longPath = "c:\\documents and settings\\usermth\\my documents\
> \......blablablabla"
>
> # map path as drive b: (notice "" around path to avoid problems with
> spaces)
> os.system('subst b: "%s"' % longPath)
>
> longPath = 'b:\\'

you can also use \\?\ prefix but ONLY FOR unicode strings


os.path.getmtime("\\\\?\\c:\\very lon path\\blablabla") #will not work
os.path.getmtime(u"\\\\?\\c:\\very lon path\\blablabla") #will work



More information about the Python-list mailing list