2

私はSHFileOperationを使用していますが、ソースはファイル名がnullで区切られ、全体がdoublenullで終了するpwidecharにすることができます。

widecharの配列を作成でき、必要な情報を保持しますが、関数をpwidecharに変換しようとすると、最初のnullにのみコピーされます。

私は何が間違っているのですか?

4

1 に答える 1

15

このような:

const
  null = #0;

var
  FileNames: string;
...
FileNames := FileName1 + null + FileName2 + null;

次に、に渡しPWideChar(FileNames)ますSHFileOperation

Delphi文字列は自動的にヌルで終了するため、ダブルヌルPWideChar(FileNames)で終了します。最後に配置した1つのヌルターミネータと、自動的に追加された1つのヌルターミネータ。

ワイド文字について話しているので、UnicodeDelphiを使用していると想定していることに注意してください。古いDelphiを使用していて、を呼び出している場合は、であるSHFileOperationWことを宣言FileNamesしますWideString

たとえば、文字列リストにファイルのリストがある可能性があります。これらを次のように扱います。

var
  FileNames: string;
...
if FileList.Count=0 then
  FileNames := null
else
begin
  FileNames := '';
  for i := 0 to FileList.Count-1 do
    FileNames := FileNames + FileList[i] + null;
end;
于 2012-08-29T15:49:17.910 に答える