C#列出C:\中的所有目录

时间:2015-06-01 16:27:48

标签: c# windows list permissions directory

在我的应用程序中,每个用户都可以设置自己的保存路径来保存他的文件和设置 所以每次用户登录时我必须搜索包含用户名+“数据”的文件夹 例如,如果用户名是“Kim”,我需要找到KimData文件夹的路径 当我尝试获取C:\中的所有目录时出现UnauthorizedAcessException

有没有办法搜索该文件夹或只是在搜索时跳过未经授权的文件夹?

2 个答案:

答案 0 :(得分:0)

UnauthorizedAccessExpection表示调用者没有访问目录/文件所需的权限。由于您在本地进行,因此有多种选择。在您尝试将数据从VS复制到文件(Create, copy, delete)等中的数据后,您可以尝试File.SetAttributes(yourfile, FileAttributes.Normal)

您也可以使用Environment.GetFolderPath。因此,这:

  

“获取由...标识的系统特殊文件夹的路径   指定的枚举,并使用指定的选项进行访问   特殊文件夹。“

另外,我猜你只是一次查看整个目录/文件夹/路径。解决方法是一次探测一个目录。 这是假设您要添加文件。找到目录后,您可以使用:

    Directory.GetFiles(path)
        .ToList()
        .ForEach(s => files.Add(s));

    Directory.GetDirectories(path)
        .ToList()
        .ForEach(s => AddFiles(s, files));

编辑:有关堆栈的一些有用的相关问题可能是:

  

UnauthorizedAccessException

     

Directory.GetFiles

答案 1 :(得分:0)

查看Ignore folders/files when Directory.GetFiles() is denied access,看看它是否对您有帮助。

但是,如果你试图寻找一个特定的文件夹 - 根据你的问题,用户可以放在任何地方 - 在整个目录树中我建议反对它,因为它可能会很慢。

我建议在某处保存路径,并在用户重新登录时从那里读取它。

如果它的桌面应用程序和每个用户使用自己的Windows帐户运行应用程序,更好的解决方案是始终将数据写入用户的ApplicationData文件夹,您可以使用 Environment.GetFolderPath(Environment.SpecialFolder)获取该文件夹.ApplicationData)即可。 正如名称所示,此文件夹的存在是为了保存用户登录到Windows的应用程序数据及其个人