忽略FileList Delphi中的项目

Dan*_*man 0 delphi listview file-manager filelist

我正在使用Delphi制作简单的文件管理器.我ListView用来显示文件夹和文件,我使用FileList(它是不可见的)从某个目录中获取文件和文件夹名称.

问题是我想在ListView中不包含这个[.]元素(它是当前目录的符号,不知道为什么Delphi会FileList显示它).但是,当我试图忽略它时(这里是代码)

procedure TfolderFrame.ShowFiles;
var
  i: Integer;
  size: int64;
  fileName, extension: string;
begin
  edt1.Text := CurrentFullPath;
  lvListView.Clear;
  fllstFiles.Directory := CurrentFullPath;

  For i := 0 To fllstFiles.Items.Count-1 Do begin
    fileName := fllstFiles.Items.Strings[i];
   extension := UpperCase(ExtractFileExt(fileName));
    size := DSiFileSize(fileName);
    Delete(extension, 1, 1);

    if (fileName <> '[.]') then begin //error apperas at this line!

      if (not(isDirectory(fileName))) then begin
        lvListView.Items.Add.Caption := fileName;
        lvListView.Items[i].SubItems.Add(IntToStr(size));
        lvListView.Items[i].SubItems.Add(extension);
        lvListView.Items[i].ImageIndex := GetItemImage(fileName, extension);
      end
      else begin
        Delete(fileName, 1, 1);
        Delete(fileName, Length(fileName), 1);
        lvListView.Items.Add.Caption := fileName;
        lvListView.Items[i].ImageIndex := GetItemImage(fileName, extension);
      end;
    end;
  end;
end;
Run Code Online (Sandbox Code Playgroud)

出现错误

模块file_manager.exe中地址004634DF的访问冲突.阅读地址00000010

我做错了什么?

Ser*_*yuz 6

您没有在for循环中的每次迭代中添加项目.当您跳过时[.],您应该lvlistview.items[i]在下一次迭代中获得AV ,因为您刚刚添加的项目的索引是i-1.要解决此问题,请保留对您添加的项目的引用并对其进行处理.

var
  ..
  Item: TListItem;
begin
  ..
        Item := lvListView.Items.Add;
        Item.Caption := fileName;
        Item.SubItems.Add(IntToStr(size));
        Item.SubItems.Add(extention);
        Item.ImageIndex := GetItemImage(fileName, extention);
      ..
Run Code Online (Sandbox Code Playgroud)