如何返回包含文件的文件夹列表

本文关键字:文件 文件夹 列表 包含 何返回 返回 | 更新日期: 2023-09-27 18:31:05

我想知道如何返回包含文件的文件夹列表。

因为我无法返回两个列表...并且不能将这两种类型都放在列表中。

    public List<DirectoryInfo> GetTopFolders()
    {
        List<DirectoryInfo> Folders = new List<DirectoryInfo>();
        List<FileInfo> Files = new List<FileInfo>();
        System.IO.DirectoryInfo di = new System.IO.DirectoryInfo("C://inetpub//wwwroot//Files//");
        di.GetDirectories();
        System.IO.FileInfo[] fiArr = di.GetFiles();
        foreach (DirectoryInfo t in di.GetDirectories())
        {
            Folders.Add(t);
            foreach (FileInfo f in di.GetFiles())
            {
                Files.Add(f);
            }
        }
        return Folders;
    }

这是我实际使用的代码。

如何返回包含文件的文件夹列表

好吧,FileInfo 和 DirectoryInfo 都继承自 FileSystemInfo。 因此,您可以维护该类型的列表,并将整个批次一起返回:

public List<FileSystemInfo> GetTopFoldersAndFiles()
{
    List<FileSystemInfo> FilesAndFolders = new List<FileSystemInfo>();
    System.IO.DirectoryInfo di = new System.IO.DirectoryInfo("C://inetpub//wwwroot//Files//");
    di.GetDirectories();
    System.IO.FileInfo[] fiArr = di.GetFiles();
    foreach (DirectoryInfo t in di.GetDirectories())
    {
        FilesAndFolders.Add(t);
        foreach (FileInfo f in di.GetFiles())
        {
            FilesAndFolders.Add(f);
        }
    }
    return FilesAndFolders;
}

当然,您可能需要在代码中进行一些条件处理,以便根据每个项的类型使用此对象。

您可以使用两个元组。请参阅 Tuple.Create on msdn

public Tuple<List<DirectoryInfo>,List<FileInfo>> GetTopFolders()
{
    List<DirectoryInfo> Folders = new List<DirectoryInfo>();
    List<FileInfo> Files = new List<FileInfo>();
     /* All your other code here */
     /* Removed for brevity*/
    foreach (DirectoryInfo t in di.GetDirectories())
    {
        Folders.Add(t);
        foreach (FileInfo f in di.GetFiles())
        {
            Files.Add(f);
        }
    }
    return Tuple.Create(Folders, Files);
}

你像这样使用它:

var fileAndFolders = GetTopFolders()
fileAndFolders.Item1 //will be your folders of type List<DirectoryInfo>
fileAndFolders.Item2 //will be your folders of type List<FileInfo>
您可以使用

Dictionary<DirectoryInfo, List<FileInfo>>

private Dictionary<DirectoryInfo, List<FileInfo>> GetTopFolders()
{
    Dictionary<DirectoryInfo, List<FileInfo>> r = new Dictionary<DirectoryInfo, List<FileInfo>>();

    DirectoryInfo di = new DirectoryInfo("C://inetpub//wwwroot//Files//"); 
    di.GetDirectories();
    r.Add(di, di.GetFiles().ToList());
    foreach (DirectoryInfo t in di.GetDirectories()) 
    {
        r.Add(t, t.GetFiles().ToList());
    } 
    return r; 
}

然后,您可以像这样列出文件夹和文件:

StringBuilder sb = new StringBuilder();
foreach (KeyValuePair<DirectoryInfo, List<FileInfo>> item in GetTopFolders())
{
    sb.AppendLine(item.Key.FullName);
    foreach (FileInfo file in item.Value)
    {
        sb.AppendLine("'t" + file.Name);
    }
}
Console.WriteLine(sb.ToString());