jorma kala wrote:
Hi,
I'd like to process files in a directory which is in fact a short cut link
to another directory (under windows XP).
If the path to the directory is for instance called c:\test. I have tried
both following code snipets for printing all names of files in the
directory:

++ snippet 1++

     for filename in glob.glob( os.path.join(r'c:\test', '*') ):
         print filename

++ snippet 2++

     for filename in glob.glob( os.path.join(r'c:\test.lnk', '*') ):
         print filename


Windows shortcuts are Shell (ie GUI Desktop) objects rather
than filesystem objects. The filesystem doesn't treat them
specially; just returns the .lnk file (or whatever it's
called). You need to invoke the Shell functionality specifically.

<code>
import os, sys
import glob
import pythoncom
from win32com.shell import shell, shellcon

def shortcut_target (filename):
 shell_link = pythoncom.CoCreateInstance (
shell.CLSID_ShellLink, None, pythoncom.CLSCTX_INPROC_SERVER, shell.IID_IShellLink
 )
 ipersist = shell_link.QueryInterface (pythoncom.IID_IPersistFile)
 ipersist.Load (filename)
 name, _ = shell_link.GetPath (1)
 return name

def shell_glob (pattern):
 for filename in glob.glob (pattern):
   if filename.endswith (".lnk"):
     yield "%s => %s" % (filename, shortcut_target (filename))
   else:
     yield filename

for filename in shell_glob ("c:/temp/*"):
 print filename

</code>

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

Reply via email to