我一直坚持这个问题。
我有一个档案中的文件名列表(这里是文件和文件夹)。此列表如下所示:
folder
folder/index.html
otherfolder
问题是将层次结构变成虚拟字符串树。所属的文件和文件夹将是根文件夹中的子节点。
有任何想法吗?
我一直坚持这个问题。
我有一个档案中的文件名列表(这里是文件和文件夹)。此列表如下所示:
folder
folder/index.html
otherfolder
问题是将层次结构变成虚拟字符串树。所属的文件和文件夹将是根文件夹中的子节点。
有任何想法吗?
这是一个完整的代码。您阅读行,拆分此行以获取每个子文件夹。如果每个子文件夹已经在树中,则搜索它,否则创建新的子文件夹。用经典的树视图测试:)
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;