사용자가 파일을 검색 할 수 있도록 응용 프로그램을 작성한 후이 파일을 새 위치로 복사하는 작업을 실행합니다.Delphi - 배열의 마지막 항목 만 선택됩니다.
파일을 먼저 검색하기 위해 스레드가 시작되고 결과 (문자열 목록으로)가 Tstringlist의 동적 배열에 추가됩니다.이 검색은 필요한만큼 여러 번 수행 할 수 있으며 각 후속 시간은 배열 검색 결과의 새로운 문자열 목록이 추가됩니다. 이는 다음과 같이 메시지 루프에서 수행됩니다.
//definitions
fSearchThread: TSearchThread;
fFilesArray: array of TStringlist;
begin
if Msg.Msg = WM_SEARCH_COMPLETED then
begin
fSearchThread.Terminate;
SetLength (fFilesArray,Length(fFilesArray)+1);
fFilesArray[High(fFilesArray)]:=fslSearchResults;
end
end;
사용자가 파일을 복사하려고 할 때 실행되는 방법은 다음과 같습니다.
procedure TfMain.aGoExecute(Sender: TObject);
var
iArrayCount: integer;
thFileCopyThread: TFileCopyThread;
begin
for iArrayCount:=0 to (Length(fFilesArray)-1) do
begin
if fFilesArray[iArrayCount].Count > 0 then
begin
thFileCopyThread := TFileCopyThread.Create(false,self.Handle,C_LOG_FILE_NAME,
fFilesArray[iArrayCount],fslDestinationList);
end;
end;
end;
내가 여기 데 문제는 위의 함수는 배열의 마지막 stringlist을 위해 작동하는 것 같다이다 - 즉 fFilesArray가 [iArrayCount] 항상 배열의 같은 stringlist를 가리키는 것 같다, 그리고 나는 이유를 해결할 수 없다!
결과적으로 복사되는 배열의 모든 문자열 목록에있는 파일 대신 마지막으로 추가 된 문자열 목록의 파일 만 실제로 복사됩니다. 배열의 길이이지만 fFilesArray [iArrayCount]는 항상 동일한 문자열 목록을 가리 킵니다.
도움이 될 것입니다.
검색 할 때마다 새 TStringList를 만드는 대신 동일한 TStringList를 재사용 할 수 있습니까? 당신이 코드의 일부를 버렸기 때문에 나는 말할 수 없습니다. –
코드에 버그가있는 것 같습니다. MCVE가 그것을 추적하도록 도와 주길 바랍니다. –
이것이 문제인지 잘 모르겠지만, 'for' 루프의 한계는 루프가 입력되기 전에 한 번만 평가된다는 것을 알고 있습니까? –