簡體   English   中英

將三個子目錄中的文件添加到C#中自己的列表中

[英]Add files from three sub directories into their own Lists in C#

我想知道是否有任何方法可以將三個子目錄中的文件名放入自己的列表中。 文件路徑為Main->folder->subfolder共有三個文件夾,每個文件夾都有一個子文件夾,我需要從中獲取文件名。 有什么辦法嗎? 我目前已編寫此代碼,以將所有文件名的主列表放入主列表中

public static List<String> DirectorySearch(string dir)
{
    List<String> ListFiles = new List<String>();
    try
    {
        foreach (string f in Directory.GetFiles(dir))
        {
            var GetFileName = Path.GetFileName(f);
            //Console.WriteLine(GetFileName);
            ListFiles.Add((GetFileName).ToString());
        }

        foreach (string d in Directory.GetDirectories(dir))
        {
            var GetDirName = Path.GetFileName(d);

            ListFiles.AddRange(DirectorySearch(d));
            ListFiles.Add((GetDirName).ToString());
        }                 
        return ListFiles;
    }

如果有很多代碼且編寫過多,請讓我知道,並可能指出正確的方向,以便我自己解決其余問題。 任何建議都是有幫助的!

是的,這是可能的。 內嵌評論

/// By convention, it's better to use the primitive type string as opposed to the 
/// wrapping Type String except when making calls to the String static methods
public static Dictionary<string, List<string>> DirectorySearch(string dir)
    {
        /// I would define a dictionary<string, List<string>> to house the file names
        /// and folder names

        var fileDictionary = new Dictionary<string, List<string>>();

        /// note: variables should be camel case to avoid confusion between them and
        /// classes or properties (which are Pascal Cased)
        try
        {
            var listFiles = new List<string>();
            foreach (string fileName in Directory.GetFiles(dir))
            {
                listFiles.Add(Path.GetFileName(fileName));
            }
            /// First, we add all the parent directory's files to the dictionary
            fileDictionary.Add(dir, listFiles);

            /// Then we iterate over the subdirectory and add those files to their
            /// own key in the fileDictionary
            foreach (string subDirectory in Directory.GetDirectories(dir))
            {
                listFiles = new List<string>();
                foreach (string fileName in Directory.GetFiles(subDirectory))
                {
                    listFiles.Add(Path.GetFileName(fileName));
                }
                fileDictionary.Add(subDirectory, listFiles);
            }
        }
        catch(Exception ex)
        {
            /// Do something with your exception
        }
        return fileDictionary;
    }

我想您可以使用LINQ使用以下簡潔代碼:

 List<string> ListFiles = Directory.GetDirectories(dir)
    .SelectMany(d => Directory.GetDirectories(d).SelectMany(Directory.EnumerateFiles))
    .ToList();

這將返回子文件夾中的所有文件路徑。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM