TSearchRec Delphi 向后

jckbn6z7  于 2023-05-22  发布在  其他
关注(0)|答案(3)|浏览(119)

我不知道该怎么解释我的问题。以下是我试图解释的:函数FindNext(SearchRec)将从目录中获取下一个文件。在我的应用程序中,我有时会从我当前的SearchRec索引中返回一些文件。那我怎么做
所以我在寻找FindNext(SearchRec)的反义词,一个类似FindBackward(SearchRec)的函数

jw5wzhpr

jw5wzhpr1#

没有这样的功能。你需要在一个列表中跟踪以前的命中,比如说,并使用该列表进行回溯。

enyaitl3

enyaitl32#

我建议将它们放在TSearchRec数组中

SearchRecArr:array of TSearchRec;

然后当你到达某个文件时,从Array中获取你需要的SearchRec。
例如,这是一个例子,我在一些文件夹中放置了3个名称的文本文件(z,z1,& z2)。然后如果我到达'z2.txt'我将阅读SearchRec 2步骤倒退:

procedure TForm2.Button1Click(Sender: TObject);
var
  SearchRec:TSearchRec;
  SearchRecArr:array of TSearchRec;
  i:integer;
begin
  i:=-1;
  if FindFirst('C:\Users\zeina.shehab\Desktop\New folder\z*.txt',faAnyFile,SearchRec)=0 then
  begin
    repeat
      SetLength(SearchRecArr,length(SearchRecArr)+1);
      SearchRecArr[high(SearchRecArr)]:=SearchRec;

      inc(i);   
      if SearchRec.Name='z2.txt' then
        caption:=SearchRecArr[i-2].Name;
    until (FindNext(SearchRec)<>0);
  end;
end;
wydwbb8l

wydwbb8l3#

我写了自己的函数。下面是对我来说工作得很好的代码,它对成千上万的文件非常有效(因为它不会减慢我的播放算法)。

Procedure GetBackward(var SRInitial:TSearchRec; iForwardSpeed:integer);
var SR:TSearchRec;
    iIndex:integer;
    vLastFiles:Array of String;
begin
   SetLength(vLastFiles,Trunc(iForwardSpeed));

   FindFirst(sPath+'*.txt',faAnyFile,SR);
   while (FindNext(SR) = 0)and(SR.Name <> SRInitial.Name) do
   begin
      for iIndex := 0 to high(vLastFiles)-1 do
         vLastFiles[iIndex]:=vLast[iIndex+1];
      vLastFiles[high(vLastFiles)]:=SR.Name;
   end;

   //Fewer than ForwardSpeed
   if vLastFiles[0] = '' then
   begin
     Exit;
   end;

   FindClose(SR);

   FindClose(SRInitial);
   FindFirst(sPath+'*.'+cbType.Text,faAnyFile,SRInitial);
   while (FindNext(SRInitial) = 0)and(SRInitial.Name <> vLastFiles[0]) do
         ;

end;

功能已修改。

相关问题