Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 由于域文件夹重定向,在Environment.SpecialFolder.Favorites上调用Directory.GetDirectory时发生DirectoryNotFoundException_C#_Favorites_Special Folders_Roaming Profile - Fatal编程技术网

C# 由于域文件夹重定向,在Environment.SpecialFolder.Favorites上调用Directory.GetDirectory时发生DirectoryNotFoundException

C# 由于域文件夹重定向,在Environment.SpecialFolder.Favorites上调用Directory.GetDirectory时发生DirectoryNotFoundException,c#,favorites,special-folders,roaming-profile,C#,Favorites,Special Folders,Roaming Profile,我有一些C#代码,试图为当前登录的用户获取收藏夹。该代码是加载到Windows资源管理器进程中的任务栏工具栏的一部分。我有一个用户正在使用Windows Vista并在具有漫游配置文件或文件夹重定向设置并已启用的域上启用UAC。在收藏夹路径上调用Directory.GetDirectories时,它抛出“System.IO.DirectoryNotFoundException:找不到路径“C:\Users\\Favorites\”的一部分”。其他域上没有漫游配置文件或文件夹重定向设置的其他用户没

我有一些C#代码,试图为当前登录的用户获取收藏夹。该代码是加载到Windows资源管理器进程中的任务栏工具栏的一部分。我有一个用户正在使用Windows Vista并在具有漫游配置文件或文件夹重定向设置并已启用的域上启用UAC。在收藏夹路径上调用Directory.GetDirectories时,它抛出“System.IO.DirectoryNotFoundException:找不到路径“C:\Users\\Favorites\”的一部分”。其他域上没有漫游配置文件或文件夹重定向设置的其他用户没有此问题

用户还报告说,将失败日志中的路径复制到运行提示中无法加载该路径,但是如果他们直接使用资源管理器导航到该路径,然后将该路径复制并粘贴到运行提示中,则会正常工作。他给了我两条路,它们完全一样,根本没有任何意义

我的理论是,这是由文件夹重定向造成的,其中该路径实际上指向服务器上的共享,但在尝试访问(从Directory.GetDirectories返回的directoryInfo的)子目录时,重定向失败。初始目录可以工作,但初始目录的所有子目录都无法正确重定向

有没有人遇到过这样的情况和/或知道如何正确访问重定向文件夹的解决方法?

private void GetFavorites()
    {
        try
        {
            System.IO.DirectoryInfo dirInfo = new System.IO.DirectoryInfo(Environment.GetFolderPath(Environment.SpecialFolder.Favorites));
            AddFavorites(dirInfo);
        }
        catch
        {
        }
    }

private void AddFavorites(DirectoryInfo dirInfo)
    {
        foreach (System.IO.FileInfo fileInfo in dirInfo.GetFiles("*.url"))
        {
            //string alias = fileInfo.Name.Replace(".url", "");

            if (!ItemsBookmarks.ContainsKey(fileInfo.Name))
                ItemsBookmarks.Add(fileInfo.Name, fileInfo.Name);

        }

        foreach (System.IO.FileInfo fileInfo in dirInfo.GetFiles("*.lnk"))
        {

            if (!ItemsBookmarks.ContainsKey(fileInfo.Name))
                ItemsBookmarks.Add(fileInfo.Name, fileInfo.Name);

        }

        foreach (System.IO.DirectoryInfo objDir in dirInfo.GetDirectories())
        {
            AddFavorites(objDir);
        }
    }
谢谢


John

我相信您遇到的问题与重新分析点有关

见:

见:

使用以下语法可以避免此问题:

private void AddFavorites(string dirPath)
{
    try
        {
            foreach (string fileName in Directory.GetFiles(dirPath, "*.*", SearchOption.TopDirectoryOnly))
            {
                //string alias = fileInfo.Name.Replace(".url", "");

                if (!ItemsBookmarks.ContainsKey(fileInfo.Name))
                {
                    ItemsBookmarks.Add(fileName);
                }
            }

            foreach (string subDirName in Directory.GetDirectories(dirPath, "*.*", SearchOption.TopDirectoryOnly))
            {
                AddFavorites(objDir);
            }
        }
        catch
        {
            //error getting files or subdirs... permissions issue?
            //throw
        }
}