venutaurus...@gmail.com wrote:
On Mar 11, 7:17 pm, Tim Golden <m...@timgolden.me.uk> wrote:
venutaurus...@gmail.com wrote:
On Mar 11, 6:41 pm, Tim Golden <m...@timgolden.me.uk> wrote:
venutaurus...@gmail.com wrote:
On Mar 11, 5:19 pm, Tim Golden <m...@timgolden.me.uk> wrote:
Here is my code snippet which you will be interested in:
Indeed.
file = ur'\\?\C:\\TestDataSet\DeepPaths
\DeepPathLevel01\DeepPathLevel02\DeepPathLevel03\DeepPathLevel04\DeepPathLe 
vel05\DeepPathLevel06\DeepPathLevel07\DeepPathLevel08\DeepPathLevel09\DeepP 
athLevel10\DeepPathLevel11\DeepPathLevel12\DeepPathLevel13\DeepPathLevel14\ 
DeepPathLevel15\DeepPathLevel16\DeepPathLevel172.txt'
And what happens if you remove that second double-backslash,
the one between C: and TestDataSet?
TJG
--------------------------------------------------------------------------- 
-------------
Even if I give the file path as below
file = ur'\\?\C:\TestDataSet\DeepPaths
\DeepPathLevel01\DeepPathLevel02\DeepPathLevel03\DeepPathLevel04\DeepPathLe 
vel05\DeepPathLevel06\DeepPathLevel07\DeepPathLevel08\DeepPathLevel09\DeepP 
athLevel10\DeepPathLevel11\DeepPathLevel12\DeepPathLevel13\DeepPathLevel14\ 
DeepPathLevel15\DeepPathLevel16\DeepPathLevel172.txt'
I am still getting the exception:
Traceback (most recent call last):
  File "C:\JPDump\test.py", line 29, in <module>
    renameStubs(file)
  File "C:\JPDump\test.py", line 12, in renameStubs
    os.chdir (path)
WindowsError: [Error 206] The filename or extension is too long: u'\\\
\?\\C:\\TestDataSet\\DeepPaths\\DeepPathLevel01\\DeepPathLevel02\
\DeepPathLevel03\\DeepPathLevel04\\DeepPathLevel05\\DeepPathLevel06\
\DeepPathLevel07\\DeepPathLevel08\\DeepPathLevel09\\DeepPathLevel10\
\DeepPathLevel11\\DeepPathLevel12\\DeepPathLevel13\\DeepPathLevel14\
\DeepPathLevel15\\DeepPathLevel16\\'
Well, the source for os.chdir under Windows uses the Win32
SetCurrentDirectoryW API as expected. What is not expected
is that the MS docs for that function:
 http://msdn.microsoft.com/en-us/library/aa365530(VS.85).aspx
still seem to suggest that you can't exceed MAX_PATH (ie 260)
characters. And indeed, attempting to do a mkdir at the command
line of something longer than that will also fail.
Hmmm.. maybe the usual advice for naming files \\?\... doesn't
apply to directory paths?
Do you have an already existing full pathname that long?
TJG
Yes Sir,
      My application demands me to create deep paths of (1023) long.
I've cross checked it and the folder actually exists.
Well, a little bit of experimentation shows that you can
*create* paths this deep (say, with os.mkdir). But you
can't actually set the current directory to it. So the
next question is: do you actually need to be *in* that
directory, rather than simply to reference it?

In other words, you can do this (assuming you have a c:\temp):

<code>
import os
for i in range (1, 15):
  os.mkdir (ur"\\?\c:\temp\%s" % "\\".join (100 * "c" for j in range (i)))

</code>

But you can't then os.chdir to it. You're hitting the limits of
the OS. Try accessing files directly within the structure
you're using. (ie without chdir-ing there first).

TJG

Sir,
   My application has to rename a file in that folder.For that I had
to do a os.chdir() to that folder. Otherwise if I do a os.rename
(deeppath\file1,file2), it is creating a new file in the current
working directory with the new name and leaving the original file as
it is which is not intended :-(. So, can you suggest me any work
around for this?

Jus
t rename from and to with a full pathname (using the \\?\ bit):

os.rename (ur"\\?\c:\long\path\to\file.txt", 
ur"\\?\c:\long\path\to\newfile.txt")

TJG
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to