[python-win32] SHFileOperation doesn't work with UNICODE file paths
Shailesh Kumar
shaileshk at gmail.com
Mon Aug 13 07:49:56 CEST 2007
Thanx Roger,
With regards,
-Shailesh
On 8/12/07, Roger Upole <rwupole at msn.com> wrote:
> 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
>
> _______________________________________________
> python-win32 mailing list
> python-win32 at python.org
> http://mail.python.org/mailman/listinfo/python-win32
>
More information about the python-win32
mailing list