我有一个带有按钮的delphi表单。单击此按钮,它允许用户浏览文件并将文件复制到目录。
我的功能代码是:
function TdmData.CopyAFile(Const Sourcefile, DestFile: string): boolean;
var Src, Dest : PChar;
begin
Src := StrAlloc(Length(SourceFile)+1);
Dest := StrAlloc(Length(DestFile)+1);
try
StrPCopy(Src,SourceFile);
StrPCopy(Dest,DestFile);
result := (CopyFile(Src,Dest,FALSE));
finally
StrDispose(Src);
StrDispose(Dest);
end;
end;
按钮的点击事件:
CopyAFile(fn, Path +'\'+ ExtractFileName(fn));
当我运行此表单并按下win XP机器上的按钮时,我无法理解,它工作正常,如果我浏览到它被复制到的目录,我可以在那里看到该文件。
但是在以后的操作系统(如Win 8.1)上运行此表单时,它不会复制该文件,再次检查我看不到该文件的目录。
我没有得到任何错误,我已经逐步完成了代码,这很顺利。
有没有人遇到这个或者知道原因是什么?如果有的话,任何帮助都会很棒。
答案 0 :(得分:7)
您没有进行任何错误检查
如果CopyFile
函数失败,则返回值为零。要获取扩展错误信息,请致电GetLastError
(或通过RaiseLastOSError
提出异常)
e.g。
if not CopyFile(A, B, False) then
RaiseLastOSError;
或等效
Win32Check(CopyFile(A, B, False));
顺便说一下,正确的用法是:
CopyFile(PChar(Sourcefile) , PChar(Destfile), False);
无需额外分配。
如果您不包含UAC清单,那么您的应用程序正在virtualized mode中运行。并将文件保存到受限区域,例如Program Files
不会引发任何错误,但实际上会将文件保存到虚拟商店位置,例如[CSIDL_LOCAL_APPDATA]\VirtualStore\Program Files
。