CopyFile 函数只适用于 xp

CopyFile function only works on xp

我有一个 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 机器上按下按钮时,我无法理解什么,它工作正常,如果我浏览到它被复制到的目录,我可以看到文件在那里。

但是 运行在以后的 OS 上使用这种形式,例如 Win 8.1,它不会复制文件,再次检查目录我没有看到那里有文件。

我没有收到任何错误,我已经逐步完成了代码,一切顺利。

有没有人遇到过这个问题或知道可能是什么原因?如果是这样,任何帮助都会很棒。

您没有进行任何错误检查。
如果 CopyFile function fails, the return value is zero. To get extended error information call GetLastError(或通过 RaiseLastOSError 引发异常)

例如

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.