从路径列表填充树视图
我正在尝试从文件夹路径列表填充树视图,例如:
C:\WINDOWS\addins
C:\WINDOWS\AppPatch
C:\WINDOWS\AppPatch\MUI
C:\WINDOWS\AppPatch\MUI\040C
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\MUI
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\MUI\0409
使用如下输出:
├───addins
├───AppPatch
│ └───MUI
│ └───040C
├───Microsoft.NET
│ └───Framework
│ └───v2.0.50727
│ └───MUI
│ └───0409
注意,没有 'C:\WINDOWS\Microsoft.NET' 或 'C:\WINDOWS\Microsoft.NET\Framework'在列表中。 我已经为此工作了近两天,我的代码中有很多错误。 希望我能从这里得到帮助。
谢谢。
埃里克
I'm trying to populate a treeview from a list of folder path, for example:
C:\WINDOWS\addins
C:\WINDOWS\AppPatch
C:\WINDOWS\AppPatch\MUI
C:\WINDOWS\AppPatch\MUI\040C
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\MUI
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\MUI\0409
with an ouput like this:
├───addins
├───AppPatch
│ └───MUI
│ └───040C
├───Microsoft.NET
│ └───Framework
│ └───v2.0.50727
│ └───MUI
│ └───0409
Notice there's no 'C:\WINDOWS\Microsoft.NET' or 'C:\WINDOWS\Microsoft.NET\Framework' in the list. I've been working on this for almost two days and there's a bunch of bug in my code. Hope I can get help from here.
Thanks.
Eric
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
ehosca 答案是正确的,但有一个小问题,
当我将路径更改为这样的
它将像这样填充树视图。
但是添加一些额外的代码我们可以避免这种情况。 所以我更改了 PopulateTreeView 中的代码
现在它工作正常,如下所示
ehosca answer is correcr, but there is a little problem,
when I change paths to like this
It will popoulate treeview like this.
But adding some extra code we can avoid this situation. So I changed the code in PopulateTreeView
Now it works fine like this
对于 linq'y 版本:
for a linq'y version:
我拿了你的代码,它运行得很好,
但我只是做了一点修改来提高加载速度
当它用于大量文件列表时
看起来像查找操作,而字符串操作通常非常慢,
那么您可以使用:
注意:两种解决方案中可能都需要一些字符串敏感性检查,为了防止重新创建某些文件夹。
因为某些 url 可能指向磁盘上的同一文件夹但拼写不同,例如:
窗户; Windows , WINDOWS
I took your code, and it work very well,
but i made just a little modification for improving the load speed
when it is used whit a large list of files
it seems like find operation, and string operations generally are very slow
then you can use:
NOTE: maybe some string sensitivity check will be needed in both solutions,in order to prevent some folders re creations.
because some url could be pointing to the same folder on the diskbut spelled different such as:
Windows ; WinDOWs , WINDOWS
我尝试了 ykm29 的代码,但它无法正确填充子文件夹。 这里的一些其他答案也使用单个路径部分来识别创建的 TreeNodes。 如果不同目录中存在重复的文件夹名称,可能会导致我认为的问题。
因此,在我的代码中,我将“currentPath”值设置为我为文件夹获取的 TreeNodes 的键。 下面代码中的“ExtendedFileInfo”扩展了“FileInfo”类,并为我自己的用例添加了一些附加属性。 在调用此函数之前,创建根节点并将其分配给 TreeView。
I tried ykm29's code but it couldn't properly populate the subfolders. Some other answers here were also using a single path part to identify created TreeNodes. In case there are duplicate folder names in different directories it might cause issues I thought.
So in my code I set "currentPath" value as the Key for TreeNodes i got for folders. "ExtendedFileInfo" in below code extends "FileInfo" class with few additional properties for my own usecase. Before you call this function create your root node and assign it to your TreeView.
下面是我曾经用来从代码创建 ASP.NET 树视图的一些非常旧的代码(假设 TreeView 的 ID 为 TreeViewFolders):
Here's some very old code I once used to create an ASP.NET treeview from code (assuming TreeView has an ID of TreeViewFolders):
我已经成功地仅使用
for
循环从路径列表创建了一棵树。 而现在看来,这就是这个问题最简单的答案了。使用此代码块创建一棵树。
list
是文件或文件夹的列表,treeView1
是您的 TreeView。注意 - 如果您将其与以路径分隔符开头的路径一起使用(例如
/home/user
),并且如果您想删除路径的公共部分(或删除单个父节点),则 这可能会中断,在上一个代码块之后使用此代码块:
如果所有路径都相同,这将生成一棵空树。
I've managed to create a tree from path list using only
for
cycles. And it looks like it is the simpliest answer of this question at this moment.Use this block of code to create a tree.
list
is the list of your files or folders,treeView1
is your TreeView.Note - this may break if you use it with paths that start with the path separator (e.g.
/home/user
)And if you want to remove common parts of your paths (or remove single parent nodes), use this block of code right after the previous one:
This will generate an empty tree if all of your paths are the same.