Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > os.path.getmtime on windows, error: 206 - path or extension too long

Reply
Thread Tools

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

 
 
mynthon
Guest
Posts: n/a
 
      01-21-2009
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)
 
Reply With Quote
 
 
 
 
mynthon
Guest
Posts: n/a
 
      01-21-2009
On Jan 21, 11:50*am, mynthon <(E-Mail Removed)> 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)






 
Reply With Quote
 
 
 
 
mynthon
Guest
Posts: n/a
 
      01-21-2009
On Jan 21, 2:13*pm, mynthon <(E-Mail Removed)> wrote:
> On Jan 21, 11:50*am, mynthon <(E-Mail Removed)> 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:\\'
 
Reply With Quote
 
mynthon
Guest
Posts: n/a
 
      01-21-2009
On Jan 21, 2:58*pm, mynthon <(E-Mail Removed)> wrote:
> On Jan 21, 2:13*pm, mynthon <(E-Mail Removed)> wrote:
>
>
>
> > On Jan 21, 11:50*am, mynthon <(E-Mail Removed)> 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
 
Reply With Quote
 
Gabriel Genellina
Guest
Posts: n/a
 
      01-22-2009
En Wed, 21 Jan 2009 08:50:53 -0200, mynthon <(E-Mail Removed)> escribió:

> 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.

En Wed, 21 Jan 2009 12:11:03 -0200, mynthon <(E-Mail Removed)> escribió:

> 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.

--
Gabriel Genellina

 
Reply With Quote
 
krowey krowey is offline
Junior Member
Join Date: Feb 2013
Posts: 1
 
      02-09-2013
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.
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Long Path Tool - Fix Path Too Long Forever Martin Krag Wireless Networking 1 12-15-2012 02:53 PM
Long Path Tool - Fix Path Too Long Forever Martin Krag Windows 64bit 0 03-31-2011 08:24 AM
Having compilation error: no match for call to ‘(const __gnu_cxx::hash<long long int>) (const long long int&)’ veryhotsausage C++ 1 07-04-2008 05:41 PM
Allow Roles name too long?? AD groups too long? Integrated Security wildman@noclient.net ASP .Net 0 03-10-2008 03:47 PM
206 The filename or extension is too long / OSError: [Errno 38] Filenametoo long robert Python 1 07-01-2006 10:00 PM



Advertisments