Sha*_*pie -2 delphi operating-system file delphi-xe2
我有一个带有按钮的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;
Run Code Online (Sandbox Code Playgroud)
按钮的单击事件:
CopyAFile(fn, Path +'\'+ ExtractFileName(fn));
Run Code Online (Sandbox Code Playgroud)
当我运行这个表单并按下win XP机器上的按钮时,我无法理解,它工作正常,如果我浏览到它被复制到的目录,我可以在那里看到该文件.
但是,在以后的操作系统(如Win 8.1)上运行此表单时,它不会复制文件,再次检查目录,我看不到其中的文件.
我没有得到任何错误,我已经完成了通过罚款的代码.
有没有人遇到过这个或者知道原因是什么?如果有的话,任何帮助都会很棒.
您没有进行任何错误检查.
如果CopyFile
函数失败,则返回值为零.获取扩展错误信息调用GetLastError
(或通过引发异常RaiseLastOSError
)
例如
if not CopyFile(A, B, False) then
RaiseLastOSError;
Run Code Online (Sandbox Code Playgroud)
或者等价的
Win32Check(CopyFile(A, B, False));
Run Code Online (Sandbox Code Playgroud)
顺便说一句,正确的用法是:
CopyFile(PChar(Sourcefile) , PChar(Destfile), False);
Run Code Online (Sandbox Code Playgroud)
无需额外分配.
如果您不包含UAC清单,那么您的应用程序将以虚拟化模式运行.并且将文件保存到受限区域,例如,Program Files
不会引发任何错误,但实际上将文件保存到虚拟商店位置,例如[CSIDL_LOCAL_APPDATA]\VirtualStore\Program Files
.