将目录名递归追加到字符串

我有一个大问题,好吧,所以这里是问题:我试图从目录中获取fileinfo,以便我可以列出它在列表视图。 当我递归搜索使用该方法的文件:

    private void Get_Files(string path)
    {
        DirectoryInfo di = new DirectoryInfo(path);

        FileInfo[] fi = di.GetFiles();

        foreach (FileInfo Info in fi)
        {
            try
            {
                Files.Add(Info.FullName);
            }
            catch(Exception ee)
            {
                MessageBox.Show(ee.Message);
            }
        }

        foreach (DirectoryInfo DInfo in di.GetDirectories())
        {
            Get_Files(DInfo.FullName);
        }
    }

有时路径长于260个字符,所以我得到这个错误:路径太长,它不应该超过260个字符,我在互联网上搜索和人们说,它没有解决方案,但我已经找到了解决方案我的自我。 解决方案:正在创建一个字符串并将该路径的每个路径附加到该字符串,所以当将整个路径保存为字符串时,我从不会收到该错误。 把它看作是分开的道路,把每件作品都附加在字符串上。 所以这里是我想到的解决方案:

    List<string> Files = new List<string>();

    string completepath = string.Empty;
    string current_dire_name = string.Empty;

    private void Get_Files(string path)
    {
        DirectoryInfo di = new DirectoryInfo(path);

        FileInfo[] fi = di.GetFiles();

        foreach (FileInfo Info in fi)
        {
            try
            {
                completepath += "" + Info.Name;
                Files.Add(completepath);
                string remove_file_name = completepath;
                remove_file_name = remove_file_name.Replace("" + Info.Name, "");
                completepath = remove_file_name;
            }
            catch(Exception ee)
            {   
                if(DialogResult.Yes == MessageBox.Show("Error at the Get_Files Method and Error message :nn" + ee.Message + "nnQuit Application now ?","",MessageBoxButtons.YesNo,MessageBoxIcon.Question))
                {
                    Environment.Exit(0);
                }
            }
        }

        foreach (DirectoryInfo DInfo in di.GetDirectories())
        {
            string remove_folder_name = completepath;
            remove_folder_name = remove_folder_name.Replace("" + current_dire_name, "");
            completepath = remove_folder_name;

            current_dire_name = DInfo.Name;
            completepath += "" + DInfo.Name;
            Get_Files(DInfo.FullName);
        }
    }

好的,这种方法救了我,但它产生了错误的路径,我的意思是不正确的,可以说,如果路径应该是:C: Folder1 Folder2 Folder3 file.txt生成的路径是:C: Folder1 file .txt,类似的东西....我知道我做的方法有一些错误,特别是递归追加。

我希望有人能够和我一起考虑,以便人们可以避免漫长的道路异常。


您正在寻找.Net Long Path库,它使用Windows API的?前缀来完全避免限制。

链接地址: http://www.djcxy.com/p/36085.html

上一篇: Recursively append directory names to a string

下一篇: How to use LogonUser properly to impersonate domain user from workgroup client