4

当我执行此语句时:

string folderPath = 
   Environment.GetFolderPath(Environment.SpecialFolder.CommonDocuments);

文件夹路径设置为C:\ProgramData.

当我在即时窗口中执行此语句时:

Environment.GetFolderPath(Environment.SpecialFolder.CommonDocuments);

C:\Users\Public\Documents显示(这是我所期望的)。

有什么不同的想法吗?

2012 年 7 月 6 日更新:

我在同一个 exe 的不同类中得到不同的结果。

我有一堂课在图书馆里,一堂课直接链接到应用程序中。

库类返回“C:\ProgramData”。链接代码返回“C:\Users\Public\Documents”。

此外,库代码为“Environment.SpecialFolder.CommonDocuments”和“Environment.SpecialFolder.ApplicationData”返回“C:\ProgramData”。

链接代码为“Environment.SpecialFolder.CommonDocuments”返回“C:\Users\Public\Documents”,为“Environment.SpecialFolder.ApplicationData”返回“C:\Users\Me\AppData\Roaming”。

我很困惑。

4

2 回答 2

4

如果您的程序是 64 位,则可能会发生这种情况。由于 Visual Studio 是 32 位的,因此当您Environment.GetFolderPath(Environment.SpecialFolder.CommonDocuments);在即时窗口中执行时,它会查找 Windows 32 配置单元,而您的程序将查找 64 配置单元。并且可能是 CommonDocuments 文件夹已被移动,该文件夹只能在 64 配置单元中注册。

这是此处定义的 Windows 错误

编辑您的更新说它发生在同一个 EXE 中的两个类中。由于进程只能是 32 位或 64 位(不能同时是两者),这表明上述错误不适用于您(假设程序集之间的通信正常,而不是带有包装器的 COM)。你能把它变成一个你可以发布的合适的测试吗?

作为快速确认,可能还值得在每个代码中包含以下代码,以双重确保它们都在同一进程中运行:

  Console.WriteLine("{0} Process {1} is {2}bit", GetType().ToString(), System.Diagnostics.Process.GetCurrentProcess().Id, IntPtr.Size * 8);
于 2012-07-06T06:02:28.387 回答
1

C:\Users\Public\Documents 是正确的路径:

Per Machine “Documents”
“Document” type files that users create/open/close/save in the application that are used across users.  These are usually template or public documents.

Example:    MyTemplate.dot
Windows 7:  C:\Users\Public
Vista:  %SystemDrive%\Users\Public
XP: %ALLUSERSPROFILE%\Documents
Environment Variable:   Vista/Win7: %PUBLIC%  Note: Does not exist on XP
Known Folder ID:    FOLDERID_PublicDocuments
System.Environment.SpecialFolder:   System.Environment.SpecialFolder.CommonDocuments
CSIDL:  CSIDL_COMMON_DOCUMENTS
It’s obvious after looking at all these locations that where you store your files can be challenging if you are targeting multiple OS versions.  The best guidance is to use API’s to find the special folder path.  API’s will return the appropriate location for the target OS.

来源:http: //blogs.msdn.com/b/patricka/archive/2010/03/18/where-should-i-store-my-data-and-configuration-files-if-i-target-multiple-操作系统版本.aspx

于 2012-07-06T03:45:49.200 回答