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

M

mynthon

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)
 
M

mynthon

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)
 
M

mynthon

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:\\'
 
M

mynthon

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
 
G

Gabriel Genellina

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 [...]
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?

win32api is part of the pywin32 package, available at http://pywin32.sf.net
This is not a Python standard package - you either installed it yourself
some time ago (and forgot about it) or perhaps you're using the Enthought
bundle (which includes pywin32 and PythonWin). Either way, you surely have
the PyWin32.chm help file installed too.

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

Looks like you found the "official" answer to your problem. Notice that
the path must be "normalized" in this case - that means, it must not
contain "." nor ".." components.
 
Joined
Feb 9, 2013
Messages
1
Reaction score
0
path too long

When you encounter problems like this it's better to use a third party app than to use the options you mentioned. Try longpathtool. It can solve issues like this and other windows error like error 1320.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,007
Latest member
obedient dusk

Latest Threads

Top