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