Spaces:
Sleeping
Sleeping
import os | |
import win32api | |
from win32com.shell import shell, shellcon | |
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) | |