[python-win32] Re: SHFileOperation doesn't work with UNICODE file paths

Roger Upole rwupole at msn.com
Sun Aug 12 09:46:47 CEST 2007


Shailesh Kumar wrote:
> Hi,
> 
> Kindly have a look at following sample.
> 
> I am trying to copy files from a folder to another folder using SHFileOperation.
> The folder name as well as file name contain characters from Hiragana
> script (Japanese). Neither Copy nor Move operations work. The
> operations work if the file path doesn't contain non-ascii characters.
> 
> What am I doing wrong?
> 
> I have PyWin32 - v 209.
> 
> from win32com.shell import shell, shellcon
> 
> 
> def fileOperation(source, destination, operation):
>    result = shell.SHFileOperation((0, operation,
>                           source, destination,
>                           shellcon.FOF_NOCONFIRMATION |
>                           shellcon.FOF_NOERRORUI | shellcon.FOF_SILENT))
>    if result == 0:
>        raise Exception("Operation failed")
>    return result
> 
> def copyFile(source, destination):
>    return fileOperation(source, destination, shellcon.FO_COPY)
> 
> def moveFile(source, destination):
>    return fileOperation(source, destination, shellcon.FO_MOVE)
> 
> 
> if __name__ == '__main__':
>    "Lets do some testing of the above two functions"
>    import os
>    import sys
>    testDir = ur"D:\\SHFOTestsDir"
>    os.mkdir(testDir)
>    "Some hiragana characters"
>    smallA = u'\u3042'
>    KA = u'\u304B'
>    GI = u'\u304E'
>    folder1Name = KA * 10
>    folder2Name = GI * 10
>    folder1Path = os.path.join(testDir, folder1Name)
>    folder2Path = os.path.join(testDir, folder2Name)
>    os.mkdir(folder1Path)
>    os.mkdir(folder2Path)
>    filenames = ()
>    contents = '20' * 100
>    for i in range(10):
>        filename = KA * (i + 5)
>        filepath = os.path.join(folder1Path, filename)
>        f = open(filepath, 'w')
>        f.write(contents)
>        f.close()
>        copyFile(filepath, folder2Path)
> 
> With regards,
> - Shailesh

This is another issue with compatibility with Windows 98, which doesn't
support the unicode version of this function directly.  It's still possible to
wrap SHFileOperationW, but it takes some extra work.

Python itself stops supporting Win98 as of 2.6, but Pywin32 will probably
continue supporting it for some time since Mark usually creates releases
for at least 2 prior versions of Python.

             Roger



More information about the python-win32 mailing list