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

コードを実行すると、「ファイル名ディレクトリ名またはボリュームラベルの構文が正しくありません」というエラーメッセージが表示されます。データセット内のすべてのファイルパスを確認しましたが、正しいです。私の例では、clientdatasetに2つのJPG画像「c:\ test1.jpg」と「c:\ test2.jpg」が含まれています。source:='c:\ test1.jpg'を試したところ、完全に機能しますが、 clientdatasetからの場合、失敗します。

前もって感謝します

4

3 に答える 3

4

回答を更新しました...

推奨どおり...)

コメントフィールドでの議論の結果、エラーは文字列の末尾のスペース文字が無効であることが判明しましたSource

フィールドが文字列フィールドFileNとして定義されている場合、にはこれらの末尾のスペースが含まれます。FixedCharSource

オブジェクトインスペクタでに設定FixedCharするFalseか、末尾のスペース文字を次のように削除しますSource := Trim(Source);

于 2011-01-31T09:01:24.690 に答える
2

FileNameとDestの値をログに記録して、CopyFileに何が渡されているかを正確に確認できますか?

また、SourceではなくFileNameを使用しているようです。これは、投稿したコードフラグメントのどこにも定義されていないようです。Sourceを使用するつもりでしたか?

于 2011-01-31T08:38:38.687 に答える
1

:にパスの一部としてが含まれている場合、このエラーが発生し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 に答える