Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.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# 查找Windows计算机上所有用户的最佳文件夹_C#_.net - Fatal编程技术网

C# 查找Windows计算机上所有用户的最佳文件夹

C# 查找Windows计算机上所有用户的最佳文件夹,c#,.net,C#,.net,我们正在制作一款游戏,很快就会添加关卡编辑器功能。我们希望用户能够把他下载的关卡放到一个文件夹中,然后在游戏中玩,而不需要任何麻烦。所以,我们正在寻找一个任何人都可以找到、打开、写入、读取并且是多用户的文件夹。在WindowsVista/7上,文件夹/Users/Public/看起来是一个很好的候选者。但是,它没有列在.net enum System.Environment.SpecialFolder中。我已经检查了所有这些,并检查了它们在不同Windows版本上的性能,没有一个符合我的要求 我

我们正在制作一款游戏,很快就会添加关卡编辑器功能。我们希望用户能够把他下载的关卡放到一个文件夹中,然后在游戏中玩,而不需要任何麻烦。所以,我们正在寻找一个任何人都可以找到、打开、写入、读取并且是多用户的文件夹。在WindowsVista/7上,文件夹/Users/Public/看起来是一个很好的候选者。但是,它没有列在.net enum System.Environment.SpecialFolder中。我已经检查了所有这些,并检查了它们在不同Windows版本上的性能,没有一个符合我的要求

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

现在看来,我们不得不接受个人文档文件夹,但我们真的需要一个多用户文件夹

有人有什么建议吗


(硬编码c:\Users\Public\是不可能的,它只能在英文系统上工作)

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

Doug Hennig关于:

此文件夹没有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
可能是存放文件的合适位置。

这可能会有所帮助。见此帖:

  • 在Windows Vista或更高版本中:

    %公共%C:\Users\PUBLIC

    在Windows XP中:

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

    对于以前的操作系统,以下内容应在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();
    }
    

    您需要是管理员才能使用应用程序的directoryCommonDocuments听起来很棒,但是它是.NET4.0,而我使用的是Mono1.2.5(类似于.NET2.0),所以我必须做出类似上面的事情。Thank.CSIDL_COMMON_DOCUMENTS是适当的CSIDL值。请注意,默认情况下,所有用户都可以写入此位置,但用户不能写入其他用户创建的文件或文件夹。如果您希望多个非管理员用户能够修改同一文件,则必须明确管理权限,无论您在归档系统中的何处创建文件/文件夹。