【问题标题】:C# Listing all directories in C:\C# 列出 C:\ 中的所有目录
【发布时间】:2015-08-15 05:03:43
【问题描述】:

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

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

【问题讨论】:

  • 只需以管理员身份启动 Visual Studio
  • @Coder1409 显然以管理员身份运行并无济于事,因为并非每个文件夹都设置了权限供管理员查看而无需拥有所有权。
  • 如果您要查找当前登录的用户文件夹,请使用:Environment.GetFolderPath(Environment.SpecialFolder.UserProfile)
  • Th3Wolf - 您能否列出您已经检查过的相关问题,并说明您无法通过搜索答案解决哪些问题。
  • @AlexeiLevenkov 我已经搜索了整个“互联网”:D 但没有答案我的问题是仅通过名称找到 ta 文件夹路径

标签: c# windows list permissions directory


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    但是,如果您尝试在整个目录树中查找特定文件夹(根据您的问题,用户可以将其放置在任何位置),我建议您不要这样做,因为它可能会很慢。

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

    如果它是一个桌面应用程序并且每个用户都使用自己的 Windows 帐户运行该应用程序,那么更好的解决方案是始终将数据写入用户的 ApplicationData 文件夹,您可以使用 Environment.GetFolderPath(Environment.SpecialFolder .ApplicationData)。 顾名思义,此文件夹的存在是为了保存应用程序数据及其个人信息,供登录到 Windows 的用户使用

    【讨论】:

    • 谢谢@JoaoFSA 我已经在我的应用程序中检查了link 用户没有通过 Windows 帐户登录他们在我的应用程序中创建他们的帐户我知道保存一个包含每个用户的新文件路径是一个解决方案,但我想知道是否有另一种解决方案可以在没有该文件的情况下获取路径:D 感谢您的回答
    • @Th3Wolf 用户不需要使用他们的windows帐户登录您的应用程序,他们只需要在使用他们自己的帐户登录到windows时运行应用程序 .我粘贴的代码将获取用于运行应用程序的 Windows 帐户的目录,而不是为您的应用程序上实现的用户提供的目录
    • @Th3Wolf 如果您仍然继续扫描目录树,请记住,同名文件夹可能已经存在于其他地方,并且您找到的第一个同名文件夹实际上可能不是那个文件夹包含用户设置
    猜你喜欢
    • 2012-02-26
    • 1970-01-01
    • 2017-05-01
    • 2010-12-15
    • 2010-10-30
    • 1970-01-01
    • 2013-07-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多