我正在使用SHFileOperation,并且源可以是pwidechar,文件名由null分隔,整个东西以double null终止。

我可以创建一个widechar数组,其中包含我需要的信息,但是当我尝试将该函数转换为pwidechar时,它仅复制到第一个null。

我究竟做错了什么?

最佳答案

像这样:

const
  null = #0;

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


然后将PWideChar(FileNames)传递给SHFileOperation

由于Delphi字符串会自动以空值结尾,因此PWideChar(FileNames)是双以空值结尾的字符串。我们在末尾放置了一个空终止符,并自动添加了一个。

请注意,由于您谈论的是宽字符,因此我假设您正在使用Unicode Delphi。如果您使用的是较旧的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;

关于string - 在delphi中如何创建带有空分隔符的字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12181744/

10-13 06:00