c#IEnumerable的集合(从webservice获取文件夹结构和文件)

时间:2016-02-21 17:05:21

标签: c# recursion collections treeview ienumerable

我从网络服务中获取了一系列文件夹和文件。我想在TreeView中列出它们,但我不确定如何正确添加文件。我试图将集合转换为IEnumerable并将其绑定到我的TreeView。

我的代码将所有文件放在根文件夹中。我想我的方法远非最佳。可以用Concat做到这一点吗?

此外,我的代码有限,因为它只搜索几个级别。我怎么能转换整个集合?

private void documentButton_Click(object sender, RoutedEventArgs e)
{
    var FileInfoData = new FileDialog("Q", "Title");
    FileInfoData.ShowDialog();

    try {
        Folder folder = Webservices.GetFolders(FileInfoData.customerIdResponse, 0);
        IEnumerable<object> folders = folder.Folders;

        if (folder.Files != null && folder.Files.Count() > 0)
        {
            folders = folders.Concat(folder.Files);

            foreach (Webservice.FileInfo.File f in folder.Files)
            {
                f.Name = f.Name + "." + f.Extension;
            }
        }

        if(folder.Folders != null)
        {
            foreach (Folder f in folder.Folders)
            {
                if (f.Files != null && f.Files.Count() > 0)
                {
                    foreach (Webservice.FileInfo.File fi in f.Files)
                    {
                        fi.Name = fi.Name + "." + fi.Extension;
                    }

                    folders = folders.Concat(f.Files);
                }

                if (f.Folders != null)
                {
                    foreach (Folder ff in f.Folders)
                    {
                        if (ff.Files != null && ff.Files.Count() > 0)
                        {
                            foreach (Webservice.FileInfo.File fii in ff.Files)
                            {
                                fii.Name = fii.Name + "." + fii.Extension;
                            }

                            folders = folders.Concat(ff.Files);
                        };
                    }
                }
            }
        }

        dataGrid.ItemsSource = folders;

        Sample(myTreeView);
        myTreeView.ItemsSource = folders;
    }
    catch (Exception ex){
        addInfo(ex.ToString(), true, false);
    }
}

这些是生成集合的方法。此代码还限制搜索的级别。 webservice每个请求只返回一个级别。

public static Folder GetFolder(int customerId, int folderId)
{
    var cookieContainer = _cookie;
    using (var fileInfoService = new FileInfoService { CookieContainer = cookieContainer })
    {
        var search = new FileInfoSearch
        {TypeOfResult = ResultType.All};

        if (folderId > 0) search.FolderId = folderId;
        if (customerId > 0) search.CustomerId = customerId;

        var fileInfo = fileInfoService.GetFolderContentInfo(search);

        return fileInfo;
    }
}

internal static Folder GetFolders(int customerId, int folderId)
{
    var cookieContainer = _cookie;
    using (var fileInfoService = new FileInfoService { CookieContainer = cookieContainer })
    {
        var search = new FileInfoSearch
        { TypeOfResult = ResultType.All };

        if(customerId > 0)
        {
            Folder[] _folders = GetFolder(customerId, folderId).Folders;
            if(_folders != null)
            {
                folderId = _folders.First().ParentId;
                customerId = 0;
            }

        }

        Folder folders = GetFolder(customerId, folderId);

        if(folders.Folders != null)
        {
            foreach (Folder f in folders.Folders)
            {
                Folder _f = GetFolder(0, f.Id);
                f.Folders = _f.Folders;
                f.Files = _f.Files;

                if (f.Folders != null)
                {
                    foreach (Folder ff in f.Folders)
                    {
                        Folder _ff = GetFolder(0, ff.Id);
                        ff.Folders = _ff.Folders;
                        ff.Files = _ff.Files;
                    }
                }
            }
        }
        return folders;
    }
}

0 个答案:

没有答案