2012-08-29 4 views
2

SHFileOperation을 사용하고 있으며 소스는 null로 구분 된 파일 이름의 pwidechar 일 수 있으며 전체가 double null로 끝납니다.delphi에서 null 구분 기호가있는 문자열을 만드는 방법

widechar 배열을 만들 수 있으며 필요한 정보를 보유하고 있지만 함수에 대해 pwidechar로 변환하려고하면 첫 번째 null에만 복사됩니다.

내가 뭘 잘못하고 있니? 이처럼

답변

15

:

const 
    null = #0; 

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

그런 SHFileOperationPWideChar(FileNames)를 전달합니다.

델파이 문자열은 자동으로 Null로 끝나기 때문에 PWideChar(FileNames)은 Null로 종료됩니다. 우리가 마지막에 넣는 하나의 널 터미네이터와 자동으로 추가 된 터미네이터.

넓은 문자에 대해 이야기 할 때 유니 코드 델파이를 사용한다고 가정합니다. 이전 델파이를 사용 중이고 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; 
+2

문제의 언어가 C 또는 C++ 인 경우 '\ 0'을 사용하는이 대답의 초기 버전에 사과드립니다. –

+0

작동 중입니다 만 '\ 0'을 # 0으로 변경해야했습니다. – Daniel

+0

답장하는 동안 편집 중이었던 것 같습니다. 이제는 모두 좋다 :) – Daniel