【问题标题】:Finding the best folder for all users on a Windows machine在 Windows 机器上为所有用户寻找最佳文件夹
【发布时间】:2010-03-08 17:01:48
【问题描述】:

我们正在制作一款即将添加关卡编辑器功能的游戏。我们希望用户能够将他下载的关卡放在一个文件夹中,然后在游戏中玩,没有任何麻烦。因此,我们正在寻找一个任何人都可以找到、打开、写入、读取并且是多用户的文件夹。在 Windows Vista / 7 上,文件夹 /Users/Public/ 看起来是个不错的选择。但是,它没有在 .net 枚举 System.Environment.SpecialFolder 中列出。我已经完成了所有这些,并检查了它们在不同 Windows 版本上产生的结果,但没有一个符合我的要求。

我确实找到了 Environment.SpecialFolder.CommonApplicationData,这有点用,但该文件夹是隐藏的 (C:\ProgramData),我假设大多数用户不显示隐藏文件夹。

就目前而言,看起来我们必须满足于个人文档文件夹,但我们真的想要一个多用户文件夹。

有人有什么建议吗?

(硬编码 c:\Users\Public\ 是不可能的,它只适用于英文系统)

【问题讨论】:

    标签: c# .net


    【解决方案1】:

    Doug Hennigfinding the path for C:\Users\Public:

    此文件夹没有 CSIDL 值,但环境变量 PUBLIC 指向它,因此您可以使用 GETENV('PUBLIC') 来确定其位置。默认情况下,此变量包含 Windows Vista 中的 C:\Users\Public。该变量在 Windows XP 中不存在,因此您的代码必须处理 GETENV('PUBLIC') 返回空值的情况。

    或者,您可以使用由 CSIDL_COMMON_DOCUMENTS 指定的文件夹的父级,在 XP 上为 C:\Documents and Settings\All Users\Documents,在 Vista 上为 C:\Users\Public\Documents。

    我认为Environment.SpecialFolder.CommonDocuments 可能是您存放文件的正确位置。

    【讨论】:

    • CommonDocuments 听起来很棒,但它是 .net 4.0,而且我使用的是 mono 1.2.5(类似于 .net 2.0),所以我必须像上面那样做一些事情。谢谢。
    • CSIDL_COMMON_DOCUMENTS 是适当的 CSIDL 值。
    【解决方案2】:

    以下内容应在 Vista/Win7 上返回 C:\Users\Public\Documents\,在以前的操作系统上返回 C:\Documents and Settings\All Users\Documents

    [System.Runtime.InteropServices.DllImport("shell32.dll")]
    static extern int SHGetFolderPath(IntPtr hwndOwner, int nFolder, IntPtr hToken,
     uint dwFlags, [Out] StringBuilder pszPath);
    
    public string GetSharedDocsFolder() {
     StringBuilder sb = new StringBuilder();
     int CommonDocumentsFolder = 0x002e;
    
     SHGetFolderPath(IntPtr.Zero, CommonDocumentsFolder, IntPtr.Zero, 0x0000, sb);
     return sb.ToString();
    }
    

    【讨论】:

    • 请注意,默认情况下,所有用户都可以写入此位置,但用户不能写入其他用户创建的文件或文件夹。如果您希望多个非管理员用户能够修改同一个文件,则必须明确管理权限 - 无论您在文件系统中的何处创建文件/文件夹。
    【解决方案3】:

    您能否在应用程序的目录中放置一个文件夹,然后在他们的主目录中为每个用户(当他们第一次使用该功能时)创建一个快捷方式?我知道这不是您可能想要的“通用”预先存在的文件夹,但这是否可行?

    【讨论】:

    • 您需要成为管理员才能使用应用程序的目录
    【解决方案4】:

    这可能会有所帮助。看到这个帖子:

    1. http://msdn.microsoft.com/en-us/library/bb762584%28VS.85%29.aspx

    2. Location of %allusersprofile% folder in Windows Vista?

    在 Windows Vista 或更高版本中:

    %PUBLIC%C:\Users\Public

    在 Windows XP 中:

    %ALLUSERSPROFILE%   C:\Documents and Settings\All Users
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-19
      • 1970-01-01
      • 2016-04-10
      • 2016-12-02
      相关资源
      最近更新 更多