CnCommon单元之MoveFile、DeleteToRecycleBin【3】
今天要学习的是MoveFile函数,作用就是移动文件或者文件夹。其实在系统kernel32.dll的API中已经提供该函数。
不过本着学习的精神还是分析下被重新打包的MoveFile函数
// 移动文件、目录 function MoveFile(const sName, dName: string): Boolean; var s1, s2: string; lpFileOp: TSHFileOpStruct; begin s1 := PChar(sName) + #0#0; s2 := PChar(dName) + #0#0; with lpFileOp do begin Wnd := Application.Handle; wFunc := FO_MOVE; pFrom := PChar(s1); pTo := PChar(s2); fFlags := FOF_ALLOWUNDO; hNameMappings := nil; lpszProgressTitle := nil; fAnyOperationsAborted := True; end; try Result := SHFileOperation(lpFileOp) = 0; except Result := False; end; end;
其中结构体TSHFileOpStruct需要引用ShellAPI单元。
知识点1:由于使用到了字符指针,为了确保不出错,在字符串的末尾加上了#0#0结束符。
知识点2:对结构体批量填充数据可以使用 with do 语句.不用也可以,但是需要都加上结构体前缀,麻烦不说还没有可读性.学到了.
还有一个删除文件到回收站DeleteToRecycleBin函数也顺便学习下,和上面的MoveFile函数非常类似.
// 删除文件到回收站 function DeleteToRecycleBin(const FileName: string): Boolean; var s: string; lpFileOp: TSHFileOpStruct; begin s := PChar(FileName) + #0#0; with lpFileOp do begin Wnd := Application.Handle; wFunc := FO_DELETE; pFrom := PChar(s); pTo := nil; fFlags := FOF_ALLOWUNDO or FOF_SILENT or FOF_NOCONFIRMATION; hNameMappings := nil; lpszProgressTitle := nil; fAnyOperationsAborted := True; end; try Result := SHFileOperation(lpFileOp) = 0; except Result := False; end; end;
如果觉得文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
作者:YXGust
出处:https://www.cnblogs.com/YXGust/p/14724943.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
本博文版权归本博主所有,转载请注明原文链接
微信打赏
支付宝打赏
浙公网安备 33010602011771号