【问题标题】:Error While using the CopyFile function使用 CopyFile 函数时出错
【发布时间】:2012-08-09 19:12:51
【问题描述】:

您好,我在 Delphi 5 中使用CopyFile 函数。但是文件没有被复制到目标。我也看不到错误。了解CopyFile 为何失败的最佳方法是什么?

if CopyFile(source, dest, false) then
  ShowMessage('Success')
else
  ShowMessage('Error');

我总是收到显示错误。 :(

【问题讨论】:

  • 您应该使用 pchar (CopyFile(pchar(sourcefile), pchar(destfile), false)。要检查文件是否副本,请使用 FileExists(destfile)。您可以尝试将 CopyFile 包装起来/except 并响应异常...
  • @JohnEasley 没错,但无助于识别错误代码。
  • 主要故障模式:1. 源不存在 2. 目标路径不存在 3. 目标文件只读 4. 权限错误。
  • 例如,试图替换当前打开的文件(因此被锁定)
  • @JohnEasley:这个问题是关于D5/7(pre-Unicode)的,其中参数为PChar(与PAnsiChar相同),而CopyFile实际上是CopyFileA下的兜帽。不过没关系 - 在 D2010 中,string 是 Unicode,如果没有类型转换,Delphi 仍然会自动转换,同上;在 D2010 中,CopyFile 实际上是宽字符串版本的CopyFileW。 Delphi 所做的自动转换类似于它允许您在访问类实例(它们是指针)或像TPoint 这样的记录时删除^ 运算符的方式,因此您可以使用Form1. 而不是Form1^.

标签: delphi delphi-5


【解决方案1】:

如果函数失败你可以得到扩展的错误信息,调用GetLastError方法或者使用RaiseLastOSError方法。

检查此示例

  try
    If copyFile(source , dest,false) then
     ShowMessage('Success')
    else
     RaiseLastOSError;
  except  on E: Exception do
     showMessage(Format('Error executing copyFile %s',[E.Message]));
  end;

【讨论】:

  • 收到错误未声明的标识符:RaiseLastOSError。 :( 包含在哪个单元中?
  • 抱歉我用的是delphi 5。:(我写错了7。
  • 现在收到消息 Win32 API 函数失败。知道为什么会失败吗?
  • @Naren 在 Delphi 5 中你可以使用RaiseLastWin32Error 方法。
  • 真正的错误信息是什么?请不要编造错误信息。
猜你喜欢
  • 2019-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多