Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在delphi、virtualstringtree中通过文件名列表构建层次结构_Delphi_Virtualtreeview_Tvirtualstringtree - Fatal编程技术网

如何在delphi、virtualstringtree中通过文件名列表构建层次结构

如何在delphi、virtualstringtree中通过文件名列表构建层次结构,delphi,virtualtreeview,tvirtualstringtree,Delphi,Virtualtreeview,Tvirtualstringtree,我一直在解决这个问题 我有一个档案中的文件名列表(这里是文件和文件夹)。此列表如下所示: folder folder/index.html otherfolder 问题是如何将层次结构转换为virtualstringtree。 所属的文件和文件夹将是根文件夹中的子节点 有什么想法吗?这是完整的代码。 你们读这行,你们把这行分开,得到每个子文件夹。 如果每个子文件夹已经在目录树中,则搜索它;如果不是,则创建新的子文件夹。 使用经典的treeview进行测试:) 这段代码在树视图上运行得非常好。如

我一直在解决这个问题

我有一个档案中的文件名列表(这里是文件和文件夹)。此列表如下所示:

folder
folder/index.html
otherfolder
问题是如何将层次结构转换为virtualstringtree。 所属的文件和文件夹将是根文件夹中的子节点

有什么想法吗?

这是完整的代码。 你们读这行,你们把这行分开,得到每个子文件夹。 如果每个子文件夹已经在目录树中,则搜索它;如果不是,则创建新的子文件夹。 使用经典的treeview进行测试:)


这段代码在树视图上运行得非常好。如何将其集成到virtualstringtree?t应将TreeNode更改为PVirtualNode,并将TreeView替换为VirtualTreeview。我没有安装VirtualTreeview的delphi。但是,我认为这很容易。稍微搜索一下;)
procedure TForm1.Analyze(ListOfFiles : TStringList);
var
   root: TTreeNode;
   nI: Integer;
   files : TStringList;
  nJ: Integer;
begin
   for nI := 0 to ListOfFiles.Count - 1 do
   begin
        files := TStringList.Create;
        files.Delimiter := '/';
        files.DelimitedText := ListOfFiles[nI];
        root := nil;
        for nJ := 0 to files.Count - 1 do
             root := GetFolder(root, files[nJ])

        FreeAndNil( Files );
   end;
end;

function TForm1.GetFolder( TreeNode : TTreeNode; SubFolder : String ) : TTreeNode;
var
  nI: Integer;
begin
     result := nil;

     if Assigned( TreeNode ) then
     begin
         for nI := 0 to TreeNode.Count - 1 do
         begin
              if SameText(TreeNode.Item[nI].Text, SubFolder) then
              begin
                 result := TreeNode.item[nI];
                 Exit;
              end;
         end;
     end
     else
     begin
         for nI := 0 to TreeView1.Items.Count - 1 do
         begin
              if SameText(TreeView1.Items[nI].Text, SubFolder) then
              begin
                 result := TreeView1.Items[nI];
                 Exit;
              end;
         end;

     end;
     if not Assigned( result ) then
     begin
          result := TreeView1.Items.AddChild( TreeNode, SubFolder );
          Exit;
     end;

end;