我正在使用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
我做错了什么?
答案 0 :(得分: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);
..