【问题标题】:Ignore item in FileList Delphi忽略 FileList Delphi 中的项目
【发布时间】:2013-09-24 18:32:46
【问题描述】:

我正在使用 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;

出现错误

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

我做错了什么?

【问题讨论】:

  • 为什么不使用FindFirst / FindNext
  • 请不要让我们猜测错误发生在哪一个。告诉我们。你拼写它extension 而不是extension。是的,不要使用 GUI 控件来列出目录中的文件。这是一个非常糟糕的主意。
  • @JerryDodge 好吧,我以前从没用过它。_.
  • 只有检查[.]才会出现错误?从你的问题不清楚。并且显示的代码不足以表明您创建了 FileList 对象等。

标签: delphi listview file-manager filelist


【解决方案1】:

您不会在 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);
      ..

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-16
    • 2017-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-15
    • 2011-04-27
    • 2010-12-01
    相关资源
    最近更新 更多