JSA里的ffi(14)——跨盘符剪切移动文件夹
wils
创作者俱乐部成员
祝大家新春快乐!
今天论坛上有朋友问JSA里如何跨盘符移动文件夹
过去分享过movefilea方法https://bbs.wps.cn/topic/47851
现在有了ffi
用SHFileOperationW更方便,且可以跨盘符,并支持特殊unicode字符
function aa()
{
const {SHFileOperationW} = ffi.LoadLibrary("shell32",{
SHFileOperationW: { returnType: "int32", parameters: ["pointer"]},
})
const _SHFILEOPSTRUCTW = ffi.Struct([
{name: "hwnd", type: "pointer"},
{name: "wFunc", type: "uint32"},
{name: "pFrom", type: "u16string"},
{name: "pTo", type: "u16string"},
{name: "fFlags", type: "uint32"},
{name: "fAnyOperationsAborted", type: "int32"},
{name: "hNameMappings", type: "pointer"},
{name: "lpszProgressTitle", type: "pointer"},
])
const mv = new _SHFILEOPSTRUCTW({
hwnd: null,
wFunc: 1,
pFrom: "C:\\新建文件夹\0",
pTo: "D:\\\0",
fFlags: 0x0010 | 0x0400 | 0x0004,
fAnyOperationsAborted: 0,
hNameMappings: null,
lpszProgressTitle: null,
})
console.log(SHFileOperationW(mv))
}这里有个问题,pFrom pTo这里的文件路径需要以\0分隔,且必须以两个\0结尾
但好像u16string传递时会自动在结尾加一个\0,所以这里我只手动加了一个\0
这样做是否标准,希望大佬指正
创作者俱乐部成员
创作者俱乐部成员