testSHFileOperation.py 1.65 KB
Newer Older
xuebingbing's avatar
xuebingbing committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
from win32com.shell import shell, shellcon
import win32api
import os

def testSHFileOperation(file_cnt):
    temp_dir=os.environ['temp']
    orig_fnames=[win32api.GetTempFileName(temp_dir,'sfo')[0] for x in range(file_cnt)]
    new_fnames=[os.path.join(temp_dir,'copy of '+os.path.split(orig_fnames[x])[1]) for x in range(file_cnt)]

    pFrom='\0'.join(orig_fnames)
    pTo='\0'.join(new_fnames)

    shell.SHFileOperation((0, shellcon.FO_MOVE, pFrom, pTo, shellcon.FOF_MULTIDESTFILES|shellcon.FOF_NOCONFIRMATION))
    for fname in orig_fnames:
        assert not os.path.isfile(fname)
        
    for fname in new_fnames:
        assert os.path.isfile(fname)
        shell.SHFileOperation((0, shellcon.FO_DELETE, fname, None, shellcon.FOF_NOCONFIRMATION|shellcon.FOF_NOERRORUI))

def testSHNAMEMAPPINGS(file_cnt):
    ## attemps to move a set of files to names that already exist, and generated filenames should be returned
    ##   as a sequence of 2-tuples created from SHNAMEMAPPINGS handle
    temp_dir=os.environ['temp']
    orig_fnames=[win32api.GetTempFileName(temp_dir,'sfo')[0] for x in range(file_cnt)]
    new_fnames=[win32api.GetTempFileName(temp_dir,'sfo')[0] for x in range(file_cnt)]
    pFrom='\0'.join(orig_fnames)
    pTo='\0'.join(new_fnames)
    rc, banyaborted, NameMappings=shell.SHFileOperation((0, shellcon.FO_MOVE, pFrom, pTo,
        shellcon.FOF_MULTIDESTFILES|shellcon.FOF_NOCONFIRMATION|shellcon.FOF_RENAMEONCOLLISION|shellcon.FOF_WANTMAPPINGHANDLE))

    for old_fname, new_fname in NameMappings:
        print('Old:',old_fname, 'New:', new_fname)
    assert len(NameMappings)==file_cnt
testSHFileOperation(10)
testSHFileOperation(1)
testSHNAMEMAPPINGS(5)