在delphi中如何使用null分隔符创建字符串

Dan*_*iel 2 delphi string null shfileoperation

我正在使用SHFileOperation,源可以是一个pwidechar,文件名以null分隔,整个事件以double null结尾.

我可以创建一个widechar数组,它保存了我需要的信息但是当我尝试转换为pwidechar函数时,它只复制到第一个null.

我究竟做错了什么?

Dav*_*nan 15

像这样:

const
  null = #0;

var
  FileNames: string;
...
FileNames := FileName1 + null + FileName2 + null;
Run Code Online (Sandbox Code Playgroud)

然后PWideChar(FileNames)转到SHFileOperation.

因为Delphi字符串是自动以null结尾的,所以PWideChar(FileNames)是双重终止的.我们放在最后的一个空终止符,并自动添加一个.

请注意,我假设您正在使用Unicode Delphi,因为您谈论的是宽字符.如果您使用的是较旧的Delphi,并且正在呼叫SHFileOperationW,则声明FileNamesWideString.

更可能的是,你有一个文件列表,比如一个字符串列表.像这样对待他们:

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;
Run Code Online (Sandbox Code Playgroud)

  • 我为这个使用'\ 0'的答案的早期版本道歉,如果有问题的语言是C或C++,那本来没问题!?! (2认同)