String结构化对象的文件路径列表

时间:2015-06-09 16:14:30

标签: c# algorithm recursion

我正在创建一个MVC页面,它将扫描文件夹及其子文件以查找所有pdf文件并显示它们。允许用户单击链接并打开文档。

我有以下List格式的路径列表。

Docs\\Work\\Test\\TestFile0.pdf
Docs\\Work\\Test\\TEstFile1.pdf
Docs\\Work\\Job\\JobFile0.pdf
Docs\\Work\\Job\\JobFile1.pdf
Docs\\School\\English\\Eng0.pdf
Docs\\School\\English\\Eng1.pdf
Docs\\School\\German\\Ger0.pdf
Docs\\School\\German\\Ger0.pdf
Docs\\Games\\Game0.pdf
Docs\\Games\\Game1.pdf
Docs\\Games\\Game2.pdf

我想创建一个可以发送到我的View的树形结构。这是我目前的模特

public class FolderModel
{
    public string Name { get; set; }
    public List<FolderModel> ChildFolders { get; set; }
    public List<FileModel> ChildFiles { get; set; }

    public FolderModel()
    {
        ChildFolders = new List<FolderModel>();
        ChildFiles = new List<FileModel>();
    }
}

public class FileModel
{
    public string Name { get; set; }
    public string Path { get; set; }
}

我尝试了很多不同的方法,但我似乎无法让它正常工作。我目前的方法是取每个字符串,拆分它 进入字符串列表并使用递归来创建文件夹及其子项。

private FolderModel Create(List<string> path, FolderModel model, string origPath)
{
    if (!path.Any())
    {
        return model;
    }
    var firstItem = path.First();
    if (firstItem.Contains("."))
    {
        //its a file
        var file = new FileModel()
        {
            Name = firstItem,
            Path = origPath
        };
        model.ChildFiles.Add(file);
        path.RemoveAt(0);
        model = Create(path, model, origPath);
        return model;
    }
    else
    {
        //its a folder
        var folder = new FolderModel()
        {
            Name = firstItem
        };

        if (!model.ChildFolders.Contains(folder))
        {
            model.ChildFolders.Add(folder);
        }
        path.RemoveAt(0);
        model = Create(path, folder, origPath);
        return model;
    }
}

然而,我似乎无法让它正常工作并尝试了很多不同的方法。任何人都可以伸出援助之手或指出一些可以帮助我的事情。

0 个答案:

没有答案