4

我想使用 CopyFile 功能将文件从一个文件夹复制到另一个文件夹。源文件路径存储在名为“itemsDB”的 ClientDataSet 中。代码是:

Var Source, Dest : String;
Begin
  itemsDB.First;
  While Not itemsDB.EOF do
  Begin
    Source := itemsDB.FieldValues['FileN'];
    Dest := 'C:\NewDir\'+ExtractFileName(Source);
    if Not CopyFile(PChar(Source), PChar(Dest), False) then
          Showmessage(SysErrorMessage(getlasterror()));
     itemsDB.Next;
  end; 
 end

当我执行代码时,我收到错误消息“文件名目录名称或卷标语法不正确”。我验证了数据集中的所有文件路径,它们是正确的。在我的示例中,我的客户端数据集包含两个 JPG 图像“c:\test1.jpg”和“c:\test2.jpg”当我尝试 source := 'c:\test1.jpg' 时,它工作得很好,但是当我得到它来自客户端数据集,它失败了。

提前致谢

4

3 回答 3

4

更新答案...

(按照推荐...)

在评论字段中进行了一些讨论后,发现错误是字符串中的无效尾随空格字符Source

如果该FileN字段被定义为FixedChar字符串字段,Source则将包括这些尾随空格。

在对象检查器中设置FixedCharFalse,或删除尾随空格字符Source := Trim(Source);

于 2011-01-31T09:01:24.690 回答
2

您能否记录 FileName 和 Dest 的值以准确查看传递给 CopyFile 的内容?

此外,您似乎没有使用 Source,而是使用 FileName,它似乎没有在您发布的代码片段中的任何地方定义。您的意思是使用 Source 吗?

于 2011-01-31T08:38:38.687 回答
1

如果您将 a:作为路径的一部分,您将收到此错误Source。你可能有一个当然喜欢c:\c:\Test:Folder\Text.txt会给你错误The filename, directory name, or volume label syntax is incorrect

编辑 1 另一个无效字符是. 我不知道您是否在 Delphi 中使用 Unicode,或者您的数据源是否是 Unicode,但有时未知的 Unicode 字符会被翻译成.

在源中的驱动器号之前编辑 2 个 空格也会给你同样的错误。

于 2011-01-31T09:10:00.760 回答